changeset 25111:1ef96a3b8b89

summary: add a phase line (draft, secret) to the output The number of draft and secret changesets are currently not summarized. This is an important information because the number of drafts give some rough idea of the number of outgoing changesets in typical workflows, without needing to probe a remote repository. And a non-zero number of secrets means that those changeset will not be pushed. If the repository is "dirty" - some draft or secret changesets exists - then summary will display a line like: phases: X draft, Y secret (public) The phase in parenthesis corresponds to the highest phase of the parents of the working directory, i.e. the current phase. By default, the line is not printed if the repository is "clean" - all changesets are public - but if verbose is activated, it will display: phases: (public) On the other hand, nothing will be printed if quiet is in action. A few tests have been added in test-phases.t to cover the -v and -q cases.
author Gilles Moris <gilles.moris@free.fr>
date Thu, 14 May 2015 17:38:38 +0200
parents c9f382c8233a
children 3d14c1217117
files mercurial/commands.py tests/test-backout.t tests/test-bisect.t tests/test-bookmarks.t tests/test-commit-amend.t tests/test-commit-interactive.t tests/test-copy.t tests/test-histedit-edit.t tests/test-histedit-no-change.t tests/test-import.t tests/test-largefiles-misc.t tests/test-largefiles.t tests/test-merge1.t tests/test-obsolete.t tests/test-phases.t tests/test-rebase-abort.t tests/test-rebase-parameters.t tests/test-rename.t tests/test-revert.t tests/test-shelve.t tests/test-strip.t tests/test-subrepo-svn.t tests/test-subrepo.t tests/test-url-rev.t
diffstat 24 files changed, 110 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Fri May 15 12:19:51 2015 +0800
+++ b/mercurial/commands.py	Thu May 14 17:38:38 2015 +0200
@@ -5869,7 +5869,7 @@
     """summarize working directory state
 
     This generates a brief summary of the working directory state,
-    including parents, branch, commit status, and available updates.
+    including parents, branch, commit status, phase and available updates.
 
     With the --remote option, this will check the default paths for
     incoming and outgoing changes. This can be time-consuming.
@@ -5997,6 +5997,25 @@
         ui.write(_('update: %d new changesets, %d branch heads (merge)\n') %
                  (new, len(bheads)))
 
+    t = []
+    draft = len(repo.revs('draft()'))
+    if draft:
+        t.append(_('%d draft') % draft)
+    secret = len(repo.revs('secret()'))
+    if secret:
+        t.append(_('%d secret') % secret)
+
+    if parents:
+        parentphase = max(p.phase() for p in parents)
+    else:
+        parentphase = phases.public
+
+    if draft or secret:
+        ui.status(_('phases: %s (%s)\n') % (', '.join(t),
+                                            phases.phasenames[parentphase]))
+    else:
+        ui.note(_('phases: (%s)\n') % phases.phasenames[parentphase])
+
     cmdutil.summaryhooks(ui, repo)
 
     if opts.get('remote'):
--- a/tests/test-backout.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-backout.t	Thu May 14 17:38:38 2015 +0200
@@ -42,6 +42,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
 
 commit option
 
@@ -69,6 +70,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 4 draft (draft)
 
   $ echo ypples > a
   $ hg commit -d '5 0' -m ypples
@@ -83,6 +85,7 @@
   branch: default
   commit: 1 unresolved (clean)
   update: (current)
+  phases: 5 draft (draft)
 
 file that was removed is recreated
 (this also tests that editor is not invoked if the commit message is
@@ -110,6 +113,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
 
 backout of backout is as if nothing happened
 
@@ -124,6 +128,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 4 draft (draft)
 
 across branch
 
@@ -144,6 +149,7 @@
   branch: default
   commit: (clean)
   update: 1 new changesets (update)
+  phases: 2 draft (draft)
 
 should fail
 
@@ -160,6 +166,7 @@
   branch: default
   commit: (clean)
   update: 1 new changesets, 2 branch heads (merge)
+  phases: 3 draft (draft)
 
 should fail
 
@@ -172,6 +179,7 @@
   branch: default
   commit: (clean)
   update: 1 new changesets, 2 branch heads (merge)
+  phases: 3 draft (draft)
 
 backout with merge
 
@@ -189,6 +197,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
 
 remove line 1
 
@@ -213,6 +222,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 5 draft (draft)
 
 check line 1 is back
 
@@ -241,6 +251,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
 
 without --merge
   $ hg backout -d '3 0' 1 --tool=true
@@ -258,6 +269,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
 
 with --merge
   $ hg backout --merge -d '3 0' 1 --tool=true
@@ -302,6 +314,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 5 draft (draft)
 
 backout of merge should fail
 
@@ -332,6 +345,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 6 draft (draft)
 
   $ hg rollback
   repository tip rolled back to revision 4 (undo commit)
@@ -344,6 +358,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 5 draft (draft)
 
   $ hg backout -d '6 0' --parent 3 4 --tool=true
   removing c
@@ -354,6 +369,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 6 draft (draft)
 
   $ cd ..
 
@@ -394,6 +410,7 @@
   branch: branch2
   commit: 1 removed
   update: (current)
+  phases: 3 draft (draft)
 
 with --merge
 (this also tests that editor is invoked if '--edit' is specified
@@ -424,6 +441,7 @@
   branch: branch2
   commit: 1 removed (merge)
   update: (current)
+  phases: 4 draft (draft)
   $ hg update -q -C 2
 
 on branch2 with branch1 not merged, so file1 should still exist:
@@ -440,6 +458,7 @@
   branch: branch2
   commit: (clean)
   update: 1 new changesets, 2 branch heads (merge)
+  phases: 4 draft (draft)
 
 on branch2 with branch1 merged, so file1 should be gone:
 
@@ -458,6 +477,7 @@
   branch: branch2
   commit: (clean)
   update: (current)
+  phases: 5 draft (draft)
 
 on branch1, so no file1 and file2:
 
@@ -474,6 +494,7 @@
   branch: branch1
   commit: (clean)
   update: (current)
+  phases: 5 draft (draft)
 
   $ cd ..
 
@@ -553,6 +574,7 @@
   branch: default
   commit: 1 unresolved (clean)
   update: (current)
+  phases: 3 draft (draft)
   $ hg resolve --all --debug
   picked tool 'internal:merge' for foo (binary False symlink False)
   merging foo
@@ -570,6 +592,7 @@
   branch: default
   commit: 1 modified, 1 unknown
   update: (current)
+  phases: 3 draft (draft)
   $ cat foo
   one
   two
--- a/tests/test-bisect.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-bisect.t	Thu May 14 17:38:38 2015 +0200
@@ -190,6 +190,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 32 draft (draft)
   $ hg bisect -g 1
   Testing changeset 16:a2e6ea4973e9 (30 changesets remaining, ~4 tests)
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
--- a/tests/test-bookmarks.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-bookmarks.t	Thu May 14 17:38:38 2015 +0200
@@ -393,6 +393,7 @@
   bookmarks: *Z Y x  y
   commit: (clean)
   update: 1 new changesets, 2 branch heads (merge)
+  phases: 3 draft (draft)
 
 test id
 
@@ -538,6 +539,7 @@
   bookmarks: *Z Y x  y
   commit: 1 added, 1 unknown (new branch head)
   update: 2 new changesets (update)
+  phases: 5 draft (draft)
   $ hg update
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   updating bookmark Z
--- a/tests/test-commit-amend.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-commit-amend.t	Thu May 14 17:38:38 2015 +0200
@@ -72,6 +72,7 @@
   branch: default
   commit: 1 added, 1 unknown
   update: (current)
+  phases: 2 draft (draft)
   $ HGEDITOR="\"sh\" \"`pwd`/editor.sh\"" hg commit --amend
   transaction abort!
   rollback completed
@@ -83,6 +84,7 @@
   branch: default
   commit: 1 added, 1 unknown
   update: (current)
+  phases: 2 draft (draft)
 
 Add new file:
   $ hg ci --amend -m 'amend base1 new file'
--- a/tests/test-commit-interactive.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-commit-interactive.t	Thu May 14 17:38:38 2015 +0200
@@ -81,6 +81,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
 
 Rename empty file
 
--- a/tests/test-copy.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-copy.t	Thu May 14 17:38:38 2015 +0200
@@ -19,6 +19,7 @@
   branch: default
   commit: 1 copied
   update: (current)
+  phases: 1 draft (draft)
   $ hg --debug commit -m "2"
   committing files:
   b
--- a/tests/test-histedit-edit.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-histedit-edit.t	Thu May 14 17:38:38 2015 +0200
@@ -246,6 +246,7 @@
   branch: default
   commit: 1 added (new branch head)
   update: 1 new changesets (update)
+  phases: 7 draft (draft)
   hist:   1 remaining (histedit --continue)
 
 (test also that editor is invoked if histedit is continued for
--- a/tests/test-histedit-no-change.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-histedit-no-change.t	Thu May 14 17:38:38 2015 +0200
@@ -183,6 +183,7 @@
   branch: default
   commit: 1 added, 1 unknown (new branch head)
   update: 6 new changesets (update)
+  phases: 7 draft (draft)
   hist:   2 remaining (histedit --continue)
 
   $ hg histedit --abort 2>&1 | fixbundle
--- a/tests/test-import.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-import.t	Thu May 14 17:38:38 2015 +0200
@@ -990,6 +990,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 2 draft (draft)
 
   $ hg diff --git -c tip
   diff --git a/lib/place-holder b/lib/place-holder
--- a/tests/test-largefiles-misc.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-largefiles-misc.t	Thu May 14 17:38:38 2015 +0200
@@ -228,6 +228,7 @@
   branch: default
   commit: 1 subrepos
   update: (current)
+  phases: 2 draft (draft)
   $ hg st
   $ hg st -S
   A subrepo/large.txt
@@ -245,6 +246,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
   $ echo "rev 2" > subrepo/large.txt
   $ hg st -S
   M subrepo/large.txt
@@ -254,6 +256,7 @@
   branch: default
   commit: 1 subrepos
   update: (current)
+  phases: 3 draft (draft)
   $ hg ci -m "this commit should fail without -S"
   abort: uncommitted changes in subrepository 'subrepo'
   (use --subrepos for recursive commit)
@@ -567,6 +570,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
   largefiles: (no remote repo)
 
 check messages when there is no files to upload:
@@ -581,6 +585,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
   largefiles: (no files to upload)
   $ hg -R clone2 outgoing --large
   comparing with $TESTTMP/issue3651/src (glob)
@@ -608,6 +613,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 2 draft (draft)
   largefiles: 1 entities for 1 files to upload
   $ hg -R clone2 outgoing --large
   comparing with $TESTTMP/issue3651/src (glob)
@@ -643,6 +649,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
   largefiles: 1 entities for 3 files to upload
   $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n"
   comparing with $TESTTMP/issue3651/src (glob)
@@ -692,6 +699,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 6 draft (draft)
   largefiles: 3 entities for 3 files to upload
   $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n"
   comparing with $TESTTMP/issue3651/src (glob)
@@ -750,6 +758,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 6 draft (draft)
   largefiles: 2 entities for 1 files to upload
   $ hg -R clone2 outgoing --large -T "{rev}:{node|short}\n"
   comparing with $TESTTMP/issue3651/src (glob)
--- a/tests/test-largefiles.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-largefiles.t	Thu May 14 17:38:38 2015 +0200
@@ -67,6 +67,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 2 draft (draft)
   largefiles: (no remote repo)
 
 Commit preserved largefile contents.
@@ -999,6 +1000,7 @@
   branch: default
   commit: (clean)
   update: 7 new changesets (update)
+  phases: 8 draft (draft)
 
   $ rm "${USERCACHE}"/*
   $ hg clone --all-largefiles -u 1 a a-clone1
@@ -1021,6 +1023,7 @@
   branch: default
   commit: (clean)
   update: 6 new changesets (update)
+  phases: 8 draft (draft)
 
   $ rm "${USERCACHE}"/*
   $ hg clone --all-largefiles -U a a-clone-u
@@ -1030,6 +1033,7 @@
   branch: default
   commit: (clean)
   update: 8 new changesets (update)
+  phases: 8 draft (public)
 
 Show computed destination directory:
 
--- a/tests/test-merge1.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-merge1.t	Thu May 14 17:38:38 2015 +0200
@@ -40,6 +40,7 @@
   branch: default
   commit: (interrupted update)
   update: 1 new changesets (update)
+  phases: 2 draft (draft)
   $ rmdir b
   $ hg up
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -49,6 +50,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 2 draft (draft)
 
 Prepare a basic merge
 
--- a/tests/test-obsolete.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-obsolete.t	Thu May 14 17:38:38 2015 +0200
@@ -164,6 +164,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
   remote: 3 outgoing
 
   $ hg summary --remote --hidden
@@ -172,6 +173,7 @@
   branch: default
   commit: (clean)
   update: 3 new changesets, 4 branch heads (merge)
+  phases: 6 draft (draft)
   remote: 3 outgoing
 
 check that various commands work well with filtering
--- a/tests/test-phases.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-phases.t	Thu May 14 17:38:38 2015 +0200
@@ -242,6 +242,25 @@
   1 0 B
   0 0 A
 
+Test summary
+
+  $ hg summary -R clone-dest --verbose
+  parent: -1:000000000000  (no revision checked out)
+  branch: default
+  commit: (clean)
+  update: 5 new changesets (update)
+  phases: (public)
+  $ hg summary -R initialrepo
+  parent: 7:17a481b3bccb tip
+   merge B' and E
+  branch: default
+  commit: (clean)
+  update: 1 new changesets, 2 branch heads (merge)
+  phases: 3 draft, 3 secret (secret)
+  $ hg summary -R initialrepo --quiet
+  parent: 7:17a481b3bccb tip
+  update: 1 new changesets, 2 branch heads (merge)
+
 Test revset
 
   $ cd initialrepo
--- a/tests/test-rebase-abort.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-rebase-abort.t	Thu May 14 17:38:38 2015 +0200
@@ -321,3 +321,4 @@
   branch: default
   commit: (clean)
   update: 1 new changesets, 2 branch heads (merge)
+  phases: 4 draft (draft)
--- a/tests/test-rebase-parameters.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-rebase-parameters.t	Thu May 14 17:38:38 2015 +0200
@@ -476,6 +476,7 @@
   branch: default
   commit: 1 modified, 1 unresolved (merge)
   update: (current)
+  phases: 3 draft (draft)
   rebase: 0 rebased, 1 remaining (rebase --continue)
 
   $ hg resolve -l
--- a/tests/test-rename.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-rename.t	Thu May 14 17:38:38 2015 +0200
@@ -20,6 +20,7 @@
   branch: default
   commit: 1 renamed
   update: (current)
+  phases: 1 draft (draft)
   $ hg status -C
   A d2/c
     d1/d11/a1
--- a/tests/test-revert.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-revert.t	Thu May 14 17:38:38 2015 +0200
@@ -360,6 +360,7 @@
   branch: default
   commit: 2 modified, 1 removed (merge)
   update: (current)
+  phases: 3 draft (draft)
 
 clarifies who added what
 
--- a/tests/test-shelve.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-shelve.t	Thu May 14 17:38:38 2015 +0200
@@ -782,6 +782,7 @@
   bookmarks: *test
   commit: 2 unknown (clean)
   update: (current)
+  phases: 5 draft (draft)
 
   $ hg shelve --delete --stat
   abort: options '--delete' and '--stat' may not be used together
--- a/tests/test-strip.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-strip.t	Thu May 14 17:38:38 2015 +0200
@@ -526,6 +526,7 @@
   branch: default
   commit: 1 modified, 1 unknown, 1 unresolved
   update: (current)
+  phases: 2 draft (draft)
   mq:     3 unapplied
 
   $ echo c > b
@@ -553,6 +554,7 @@
   branch: default
   commit: 1 modified, 1 unknown
   update: (current)
+  phases: 1 draft (draft)
   mq:     3 unapplied
 
 Strip adds, removes, modifies with --keep
--- a/tests/test-subrepo-svn.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-subrepo-svn.t	Thu May 14 17:38:38 2015 +0200
@@ -72,6 +72,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 2 draft (draft)
   $ hg ci -moops
   nothing changed
   [1]
@@ -96,6 +97,7 @@
   branch: default
   commit: 1 modified, 1 subrepos
   update: (current)
+  phases: 2 draft (draft)
   $ hg commit --subrepos -m 'Message!' | grep -v Updating
   committing subrepository s
   Sending*s/alpha (glob)
@@ -136,6 +138,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
 
   $ echo a > s/a
 
--- a/tests/test-subrepo.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-subrepo.t	Thu May 14 17:38:38 2015 +0200
@@ -38,6 +38,7 @@
   branch: default
   commit: 1 added, 1 subrepos
   update: (current)
+  phases: 1 draft (draft)
   $ hg ci -m1
 
 test handling .hgsubstate "added" explicitly.
@@ -83,6 +84,7 @@
   branch: default
   commit: 1 subrepos
   update: (current)
+  phases: 2 draft (draft)
   $ hg co -C 1
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg sum
@@ -91,6 +93,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 2 draft (draft)
 
 commands that require a clean repo should respect subrepos
 
@@ -113,6 +116,7 @@
   branch: default
   commit: 1 subrepos
   update: (current)
+  phases: 2 draft (draft)
   $ hg ci -m2
   committing subrepository s
   committing subrepository s/ss (glob)
@@ -122,6 +126,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 3 draft (draft)
 
 test handling .hgsubstate "modified" explicitly.
 
--- a/tests/test-url-rev.t	Fri May 15 12:19:51 2015 +0800
+++ b/tests/test-url-rev.t	Thu May 14 17:38:38 2015 +0200
@@ -101,6 +101,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 4 draft (draft)
   remote: 2 outgoing
   $ hg -q outgoing '../clone#foo'
   2:faba9097cad4
@@ -110,6 +111,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 4 draft (draft)
   remote: 1 outgoing
 
   $ hg -q --cwd ../clone incoming '../repo#foo'
@@ -282,6 +284,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
   remote: 1 outgoing
 
   $ hg summary --remote --config paths.default='../clone#foo' --config paths.default-push='../clone'
@@ -290,6 +293,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
   remote: 2 outgoing
 
   $ hg summary --remote --config paths.default='../clone' --config paths.default-push='../clone#foo'
@@ -298,6 +302,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
   remote: 1 outgoing
 
   $ hg clone -q -r 0 . ../another
@@ -311,6 +316,7 @@
   branch: default
   commit: (clean)
   update: (current)
+  phases: 1 draft (draft)
   remote: 1 outgoing
 
   $ cd ..