2011-07-14 24 views
10

Tôi hiện đang thêm bao bì vào thứ gì đó được duy trì trong Mercurial. Hiện tại phiên bản được định nghĩa trong Makefile. Tôi muốn thay đổi điều này để tôi có thể xây dựng các gói hàng ngày hoặc các gói được phiên bản chính xác.Có tương đương với chức năng "mô tả" của git cho Mercurial không?

Git cung cấp chức năng "mô tả" sử dụng có thể cung cấp cho bạn mô tả về bản dựng được gắn thẻ gần nhất và bản sửa đổi hiện tại. Ví dụ nếu tôi chạy này trong kernel:

git describe HEAD 

GIT lợi nhuận:

v3.0-rc7-68-g51414d4 

nói với tôi rằng việc sửa đổi là muộn hơn v3.0-RC7, với một commitish git của 51414d4

Có điều gì tương tự tôi có thể làm trong Mercurial không?

+3

Đối với những người trong chúng ta không biết git, nhưng không biết Mercurial, bạn có thể phác thảo những gì bạn muốn đầu ra và tại sao? Nó sẽ làm tăng khả năng ai đó có thể trả lời rất nhiều. –

+0

@Lasse: done, cảm ơn vì đã chỉ ra điều đó. – stsquad

+0

Kính gửi OP: Nếu bạn có thời gian, vui lòng di chuyển dấu kiểm từ câu trả lời cũ hơn đến câu trả lời mới hơn. Câu trả lời mới hơn là tốt hơn. – unforgettableid

Trả lời

13

Có thể giống như thế này?

hg log -r . --template '{latesttag}-{latesttagdistance}-{node|short}\n' 

Tất nhiên bạn nên tạo bí danh cho số đó với AliasExtension.

Lưu ý Tuy nhiên, không giống như "git mô tả", lệnh này sẽ luôn hiển thị "latesttagdistance" và "nút | ngắn" phần, thay vì bỏ qua chúng khi latesttagdistance là 0.

+0

Cũng có thể thực hiện được với các vòng quay. – tonfa

+0

Chuỗi này có được đảm bảo là một refspec hợp lệ như là đúng với 'git describe'? – nocnokneo

4

Đây là một mô phỏng gần của git describe:

hg log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}" 

chức năng {sub(...)} đảm bảo rằng một bản sao làm việc đó là chính xác tại thẻ v0.1.0 sẽ hiển thị như v0.1.0 và không v0.1.0-0-m123456789abc.

Lưu ý rằng m trước băm là dành cho m ercurial, tương tự như cách sử dụng một git describeg cho g nó.

Để thuận tiện, tạo một bí danh bằng cách thêm dòng sau vào ~/.hgrc của bạn:

[alias] 
describe = log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}" 

Sau đó, sử dụng bí danh bằng cách đơn giản gõ hg describe.

Nếu bạn muốn bắt chước git describe --dirty, mọi thứ trở nên thậm chí Messier - nhưng bạn vẫn có thể ẩn nó tất cả trong một bí danh hg:

[alias] 
describe = ! 
    dirtymark=; 
    case " $1 " in " --dirty ") dirtymark=-dirty; ;; esac; 
    echo $($HG log -r . --template "{latesttag}-{latesttagdistance}-m")$($HG id -i) | 
     sed -r -e "s/\+\$/${dirtymark}/" -e 's/-0-m[[:xdigit:]]+//' 

Bây giờ chạy hg describe --dirty sẽ tạo ra chuỗi như:

  1. v0.1.0
  2. v0.1.0-dirty
  3. v0.1.0-1-mf6caaa650816
  4. v0.1.0-1-mf6caaa650816-dirty

Bỏ tùy chọn --dirty có nghĩa là bạn sẽ không bao giờ có được một hậu tố -dirty tương tự (2) và (4), ngay cả khi các bản sao làm việc có những thay đổi không bị giam.

Các vấn đề liên quan