# HG changeset patch # User Zoran Bosnjak # Date 2008-03-01 21:30:03 # Node ID acc40572da5b26d79106c42eca3b3a1274c05df1 # Parent 0068809347d72e552f980487ee669ace9a82d214 'hg status -q' output skips non-tracked files. The '-q' flag was ignored in status command. But this flag can be used to hide non-tracked files in hg status output. This small correction makes status command more general, similar to 'svn status', where '-q' flag has the same effect. The '-u' and '-A' flags have priority over '-q'. A testcase and doc-string for status was extended to cover '-q' flag. diff --git a/mercurial/commands.py b/mercurial/commands.py --- a/mercurial/commands.py +++ b/mercurial/commands.py @@ -2493,6 +2493,9 @@ def status(ui, repo, *pats, **opts): -i (ignored), -C (copies) or -A is given. Unless options described with "show only ..." are given, the options -mardu are used. + Option -q/--quiet hides untracked files unless explicitly + requested by -u. + NOTE: status may appear to disagree with diff if permissions have changed or a merge has occurred. The standard diff format does not report permission changes and diff only reports changes relative @@ -2537,6 +2540,12 @@ def status(ui, repo, *pats, **opts): for opt, char, changes in ([ct for ct in explicit_changetypes if all or opts[ct[0]]] or changetypes): + + # skip unknown files if -q, but -u and -A have priority over -q + if (not opts['unknown']) and (not opts['all']): + if opt == 'unknown' and ui.quiet: + continue + if opts['no_status']: format = "%%s%s" % end else: diff --git a/tests/test-help.out b/tests/test-help.out --- a/tests/test-help.out +++ b/tests/test-help.out @@ -222,6 +222,9 @@ show changed files in the working direct -i (ignored), -C (copies) or -A is given. Unless options described with "show only ..." are given, the options -mardu are used. + Option -q/--quiet hides untracked files unless explicitly + requested by -u. + NOTE: status may appear to disagree with diff if permissions have changed or a merge has occurred. The standard diff format does not report permission changes and diff only reports changes relative diff --git a/tests/test-status b/tests/test-status --- a/tests/test-status +++ b/tests/test-status @@ -44,3 +44,51 @@ echo "hg status ignoreddir/file:" hg status ignoreddir/file echo "hg status -i ignoreddir/file:" hg status -i ignoreddir/file +cd .. + +# check 'status -q' and some combinations +hg init repo3 +cd repo3 +touch modified removed deleted ignored +echo "^ignored$" > .hgignore +hg commit -A -m 'initial checkin' +touch added unknown ignored +hg add added +echo "test" >> modified +hg remove removed +rm deleted +hg copy modified copied + +# Run status with 2 different flags. +# Check if result is the same or different. +# If result is not as expected, raise error +function assert { + hg status $1 > ../a + hg status $2 > ../b + out=`diff ../a ../b` + if [ $? -ne 0 ]; then + out=1 + else + out=0 + fi + if [ $3 -eq 0 ]; then + df="same" + else + df="different" + fi + if [ $out -ne $3 ]; then + echo "Error on $1 and $2, should be $df." + fi +} + +# assert flag1 flag2 [0-same | 1-different] +assert "-q" "-mard" 0 +assert "-A" "-mardicCu" 0 +assert "-qA" "-mardicCu" 0 +assert "-qAu" "-A" 0 +assert "-qA" "-A" 0 +assert "-qu" "-u" 0 +assert "-q" "-u" 1 +assert "-m" "-a" 1 +assert "-r" "-d" 1 + diff --git a/tests/test-status.out b/tests/test-status.out --- a/tests/test-status.out +++ b/tests/test-status.out @@ -120,3 +120,7 @@ C modified hg status ignoreddir/file: hg status -i ignoreddir/file: I ignoreddir/file +adding .hgignore +adding deleted +adding modified +adding removed