changeset 5300:81575b7b505e

Merge with crew-stable
author Patrick Mezard <pmezard@gmail.com>
date Tue, 11 Sep 2007 23:38:29 +0200
parents ec061aaa25a4 (current diff) 5a4824f6665c (diff)
children 9400d677efc7
files mercurial/commands.py
diffstat 3 files changed, 109 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -1976,16 +1976,30 @@ def parents(ui, repo, file_=None, **opts
     revision or the argument to --rev if given) is printed.
     """
     rev = opts.get('rev')
+    if rev:
+        ctx = repo.changectx(rev)
+    else:
+        ctx = repo.workingctx()
+
     if file_:
         files, match, anypats = cmdutil.matchpats(repo, (file_,), opts)
         if anypats or len(files) != 1:
             raise util.Abort(_('can only specify an explicit file name'))
-        ctx = repo.filectx(files[0], changeid=rev)
-    elif rev:
-        ctx = repo.changectx(rev)
+        file_ = files[0]
+        filenodes = []
+        for cp in ctx.parents():
+            if not cp:
+                continue
+            try:
+                filenodes.append(cp.filenode(file_))
+            except revlog.LookupError:
+                pass
+        if not filenodes:
+            raise util.Abort(_("'%s' not found in manifest!") % file_)
+        fl = repo.file(file_)
+        p = [repo.lookup(fl.linkrev(fn)) for fn in filenodes]
     else:
-        ctx = repo.workingctx()
-    p = [cp.node() for cp in ctx.parents()]
+        p = [cp.node() for cp in ctx.parents()]
 
     displayer = cmdutil.show_changeset(ui, repo, opts)
     for n in p:
--- a/tests/test-parents
+++ b/tests/test-parents
@@ -13,6 +13,12 @@ echo a >> a
 hg ci -Ama -d '1 0'
 echo b >> b
 hg ci -Amb -d '2 0'
+echo c > c
+hg ci -Amc -d '3 0'
+hg up -C 1
+echo d > c
+hg ci -Amc2 -d '4 0'
+hg up -C 3
 
 echo % hg parents
 hg parents
@@ -20,6 +26,12 @@ hg parents
 echo % hg parents a
 hg parents a
 
+echo % hg parents c, single revision
+hg parents c
+
+echo % hg parents -r 3 c
+hg parents -r 3 c
+
 echo % hg parents -r 2
 hg parents -r 2
 
@@ -41,4 +53,15 @@ echo '% hg parents -r 2 glob:a'
 cd ..
 hg parents -r 2 glob:a
 
+echo % merge working dir with 2 parents, hg parents c
+HGMERGE=true hg merge
+hg parents c
+
+echo % merge working dir with 1 parent, hg parents
+hg up -C 2
+HGMERGE=true hg merge -r 4
+hg parents
+echo % merge working dir with 1 parent, hg parents c
+hg parents c
+
 true
--- a/tests/test-parents.out
+++ b/tests/test-parents.out
@@ -1,19 +1,30 @@
 % no working directory
 adding a
 adding b
+adding c
+1 files updated, 0 files merged, 1 files removed, 0 files unresolved
+adding c
+2 files updated, 0 files merged, 0 files removed, 0 files unresolved
 % hg parents
-changeset:   2:6cfac479f009
-tag:         tip
+changeset:   3:02d851b7e549
 user:        test
-date:        Thu Jan 01 00:00:02 1970 +0000
-summary:     b
+date:        Thu Jan 01 00:00:03 1970 +0000
+summary:     c
 
 % hg parents a
-changeset:   0:b6a1406d8886
+changeset:   1:d786049f033a
 user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-summary:     ab
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     a
 
+% hg parents c, single revision
+changeset:   3:02d851b7e549
+user:        test
+date:        Thu Jan 01 00:00:03 1970 +0000
+summary:     c
+
+% hg parents -r 3 c
+abort: 'c' not found in manifest!
 % hg parents -r 2
 changeset:   1:d786049f033a
 user:        test
@@ -21,24 +32,64 @@ date:        Thu Jan 01 00:00:01 1970 +0
 summary:     a
 
 % hg parents -r 2 a
-changeset:   0:b6a1406d8886
+changeset:   1:d786049f033a
 user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-summary:     ab
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     a
 
 % hg parents -r 2 ../a
 abort: ../a not under root
 % cd dir; hg parents -r 2 ../a
-changeset:   0:b6a1406d8886
+changeset:   1:d786049f033a
 user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-summary:     ab
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     a
 
 % hg parents -r 2 path:a
-changeset:   0:b6a1406d8886
+changeset:   1:d786049f033a
 user:        test
-date:        Thu Jan 01 00:00:00 1970 +0000
-summary:     ab
+date:        Thu Jan 01 00:00:01 1970 +0000
+summary:     a
 
 % hg parents -r 2 glob:a
 abort: can only specify an explicit file name
+% merge working dir with 2 parents, hg parents c
+merging c
+0 files updated, 1 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+changeset:   3:02d851b7e549
+user:        test
+date:        Thu Jan 01 00:00:03 1970 +0000
+summary:     c
+
+changeset:   4:48cee28d4b4e
+tag:         tip
+parent:      1:d786049f033a
+user:        test
+date:        Thu Jan 01 00:00:04 1970 +0000
+summary:     c2
+
+% merge working dir with 1 parent, hg parents
+0 files updated, 0 files merged, 1 files removed, 0 files unresolved
+1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+(branch merge, don't forget to commit)
+changeset:   2:6cfac479f009
+user:        test
+date:        Thu Jan 01 00:00:02 1970 +0000
+summary:     b
+
+changeset:   4:48cee28d4b4e
+tag:         tip
+parent:      1:d786049f033a
+user:        test
+date:        Thu Jan 01 00:00:04 1970 +0000
+summary:     c2
+
+% merge working dir with 1 parent, hg parents c
+changeset:   4:48cee28d4b4e
+tag:         tip
+parent:      1:d786049f033a
+user:        test
+date:        Thu Jan 01 00:00:04 1970 +0000
+summary:     c2
+