[PATCH] Updated status --short patch with tests

Keir Mierle keir at cs.toronto.edu
Thu Nov 23 19:38:24 GMT 2006


> Keir Mierle wrote:
> > I've updated the patch I sent the other day [1] to have tests.
> 
> Did you mean to attach the updated patch?

Yes, and I sent another message with the patch attached. Not sure why it didn't
go through.

> > I'm not even sure what an inner merge is.
> 
> When you do a merge, you get not only the changes introduced by the
> revision you're merging, but the changes from all the ancestors of that
> revision which are not ancestors of the last-committed revision.
> 
> These indirectly-merged revisions are listed as "inner merges" by the
> status output, which causes them to be indented.

Ok. I'll see about extending the tests; for now, I think the patch is suitable
for merging.

Cheers,
Keir
-------------- next part --------------
# Bazaar revision bundle v0.8
#
# message:
#   Fix spacing error and add tests for status --short command flag.
# committer: Keir Mierle <keir at cs.utoronto.ca>
# date: Thu 2006-11-23 13:56:25.005000114 -0500

=== modified file NEWS
--- NEWS
+++ NEWS
@@ -19,10 +19,18 @@
       location for general information, outside of a specific command.
       This includes updates for ``bzr help revisionspec`` the first topic
       included. (Goffredo Baroncelli, John Arbash Meinel, #42714)
-      
+
     * WSGI-compatible HTTP smart server.  See ``doc/http_smart_server.txt``.
       (Andrew Bennetts)
 
+    * Added ``bzr status --short`` to make status report svn style flags
+      for each file; for example 
+       $ bzr status --short
+       A foo
+       A bar
+       D baz
+       ? wooley
+      
   INTERNALS:
 
     * New -D option given before the command line turns on debugging output

=== modified file bzrlib/builtins.py // last-changed:keir at cs.utoronto.ca-200611
... 22083620-jsqvusdnnxfmmvd3
--- bzrlib/builtins.py
+++ bzrlib/builtins.py
@@ -128,26 +128,29 @@
     This reports on versioned and unknown files, reporting them
     grouped by state.  Possible states are:
 
-    added
+    added / A
         Versioned in the working copy but not in the previous revision.
 
-    removed
+    removed / D
         Versioned in the previous revision but removed or deleted
         in the working copy.
 
-    renamed
+    renamed / R
         Path of this file changed from the previous revision;
         the text may also have changed.  This includes files whose
         parent directory was renamed.
 
-    modified
+    modified / M
         Text has changed since the previous revision.
 
-    unknown
+    unknown / ?
         Not versioned and not matching an ignore pattern.
 
     To see ignored files use 'bzr ignored'.  For details in the
     changes to file texts, use 'bzr diff'.
+    
+    --short gives a one character status flag for each item, similar
+    to the SVN's status command.
 
     If no arguments are specified, the status of the entire working
     directory is shown.  Otherwise, only the status of the specified
@@ -161,20 +164,21 @@
     # TODO: --no-recurse, --recurse options
     
     takes_args = ['file*']
-    takes_options = ['show-ids', 'revision']
+    takes_options = ['show-ids', 'revision', 'short']
     aliases = ['st', 'stat']
 
     encoding_type = 'replace'
     
     @display_command
-    def run(self, show_ids=False, file_list=None, revision=None):
+    def run(self, show_ids=False, file_list=None, revision=None, short=False):
         from bzrlib.status import show_tree_status
 
         tree, file_list = tree_files(file_list)
             
         show_tree_status(tree, show_ids=show_ids,
                          specific_files=file_list, revision=revision,
-                         to_file=self.outf)
+                         to_file=self.outf,
+                         short=short)
 
 
 class cmd_cat_revision(Command):

=== modified file bzrlib/delta.py
--- bzrlib/delta.py
+++ bzrlib/delta.py
@@ -90,9 +90,9 @@
         return False
             
 
-    def show(self, to_file, show_ids=False, show_unchanged=False):
+    def show(self, to_file, show_ids=False, show_unchanged=False, short_status=False):
         """output this delta in status-like form to to_file."""
-        def show_list(files):
+        def show_list(files, short_status_letter=''):
             for item in files:
                 path, fid, kind = item[:3]
 
@@ -105,22 +105,31 @@
                     path += '*'
 
                 if show_ids:
-                    print >>to_file, '  %-30s %s' % (path, fid)
+                    print >>to_file, '%s  %-30s %s' % (short_status_letter, path, fid)
                 else:
-                    print >>to_file, ' ', path
+                    print >>to_file, '%s  %s' % (short_status_letter, path)
             
         if self.removed:
-            print >>to_file, 'removed:'
-            show_list(self.removed)
+            if not short_status:
+                print >>to_file, 'removed:'
+                show_list(self.removed)
+            else:
+                show_list(self.removed, 'D')
                 
         if self.added:
-            print >>to_file, 'added:'
-            show_list(self.added)
+            if not short_status:
+                print >>to_file, 'added:'
+                show_list(self.added)
+            else:
+                show_list(self.added, 'A')
 
         extra_modified = []
 
         if self.renamed:
-            print >>to_file, 'renamed:'
+            short_status_letter = 'R'
+            if not short_status:
+                print >>to_file, 'renamed:'
+                short_status_letter = ''
             for (oldpath, newpath, fid, kind,
                  text_modified, meta_modified) in self.renamed:
                 if text_modified or meta_modified:
@@ -129,18 +138,26 @@
                 if meta_modified:
                     newpath += '*'
                 if show_ids:
-                    print >>to_file, '  %s => %s %s' % (oldpath, newpath, fid)
+                    print >>to_file, '%s  %s => %s %s' % (short_status_letter,
+                                                          oldpath, newpath, fid)
                 else:
-                    print >>to_file, '  %s => %s' % (oldpath, newpath)
+                    print >>to_file, '%s  %s => %s' % (short_status_letter,
+                                                       oldpath, newpath)
                     
         if self.modified or extra_modified:
-            print >>to_file, 'modified:'
-            show_list(self.modified)
-            show_list(extra_modified)
+            short_status_letter = 'M'
+            if not short_status:
+                print >>to_file, 'modified:'
+                short_status_letter = ''
+            show_list(self.modified, short_status_letter)
+            show_list(extra_modified, short_status_letter)
             
         if show_unchanged and self.unchanged:
-            print >>to_file, 'unchanged:'
-            show_list(self.unchanged)
+            if not short_status:
+                print >>to_file, 'unchanged:'
+                show_list(self.unchanged)
+            else:
+                show_list(self.unchanged, 'S')
 
 
 @deprecated_function(zero_nine)

=== modified file bzrlib/status.py
--- bzrlib/status.py
+++ bzrlib/status.py
@@ -76,7 +76,8 @@
                      show_ids=False,
                      to_file=None,
                      show_pending=True,
-                     revision=None):
+                     revision=None,
+                     short=False):
     """Display summary of changes.
 
     By default this compares the working tree to a previous revision. 
@@ -101,6 +102,7 @@
         If not None it must be a RevisionSpec list.
         If one revision show compared it with working tree.
         If two revisions show status between first and second.
+    :param short: If True, gives short SVN-style status lines
     """
     if show_unchanged is not None:
         warn("show_status_trees with show_unchanged has been deprecated "
@@ -137,22 +139,29 @@
                               specific_files=specific_files)
         delta.show(to_file,
                    show_ids=show_ids,
-                   show_unchanged=show_unchanged)
-
-        list_paths('unknown', new.unknowns(), specific_files, to_file)
+                   show_unchanged=show_unchanged,
+                   short_status=short)
+        short_status_letter = '?'
+        if not short:
+            short_status_letter = ''
+        list_paths('unknown', new.unknowns(), specific_files, to_file,
+                   short_status_letter)
         conflict_title = False
         # show the new conflicts only for now. XXX: get them from the delta.
         for conflict in new.conflicts():
-            if conflict_title is False:
+            if not short and conflict_title is False:
                 print >> to_file, "conflicts:"
                 conflict_title = True
-            print >> to_file, "  %s" % conflict
+            if not short:
+                print >> to_file, "  %s" % conflict
+            else:
+                print >> to_file, "C  %s" % conflict
         if new_is_working_tree and show_pending:
-            show_pending_merges(new, to_file)
+            show_pending_merges(new, to_file, short)
     finally:
         wt.unlock()
 
-def show_pending_merges(new, to_file):
+def show_pending_merges(new, to_file, short=False):
     """Write out a display of pending merges in a working tree."""
     parents = new.get_parent_ids()
     if len(parents) < 2:
@@ -160,7 +169,8 @@
     pending = parents[1:]
     branch = new.branch
     last_revision = parents[0]
-    print >>to_file, 'pending merges:'
+    if not short:
+        print >>to_file, 'pending merges:'
     if last_revision is not None:
         try:
             ignore = set(branch.repository.get_ancestry(last_revision))
@@ -178,7 +188,10 @@
             from bzrlib.osutils import terminal_width
             width = terminal_width()
             m_revision = branch.repository.get_revision(merge)
-            print >> to_file, ' ', line_log(m_revision, width - 3)
+            if short:
+                print >> to_file, 'P ', line_log(m_revision, width - 3)
+            else:
+                print >> to_file, ' ', line_log(m_revision, width - 3)
             inner_merges = branch.repository.get_ancestry(merge)
             assert inner_merges[0] is None
             inner_merges.pop(0)
@@ -187,17 +200,23 @@
                 if mmerge in ignore:
                     continue
                 mm_revision = branch.repository.get_revision(mmerge)
-                print >> to_file, '   ', line_log(mm_revision, width - 5)
+                if short:
+                    print >> to_file, 'P. ', line_log(mm_revision, width - 5)
+                else:
+                    print >> to_file, '  ', line_log(mm_revision, width - 5)
                 ignore.add(mmerge)
         except errors.NoSuchRevision:
-            print >> to_file, ' ', merge
+            if short:
+                print >> to_file, 'P ', merge
+            else:
+                print >> to_file, ' ', merge
         
-def list_paths(header, paths, specific_files, to_file):
+def list_paths(header, paths, specific_files, to_file, short_status_letter=''):
     done_header = False
     for path in paths:
         if specific_files and not is_inside_any(specific_files, path):
             continue
-        if not done_header:
+        if not short_status_letter and not done_header:
             print >>to_file, '%s:' % header
             done_header = True
-        print >>to_file, ' ', path
+        print >>to_file, '%s  %s' % (short_status_letter, path)

=== modified file bzrlib/tests/blackbox/test_status.py
--- bzrlib/tests/blackbox/test_status.py
+++ bzrlib/tests/blackbox/test_status.py
@@ -41,20 +41,20 @@
 class BranchStatus(TestCaseWithTransport):
     
     def assertStatus(self, output_lines, working_tree,
-        revision=None):
+        revision=None, short=False):
         """Run status in working_tree and look for output.
         
         :param output_lines: The lines to look for.
         :param working_tree: The tree to run status in.
         """
-        output_string = self.status_string(working_tree, revision)
+        output_string = self.status_string(working_tree, revision, short)
         self.assertEqual(output_lines, output_string.splitlines(True))
     
-    def status_string(self, wt, revision=None):
+    def status_string(self, wt, revision=None, short=False):
         # use a real file rather than StringIO because it doesn't handle
         # Unicode very well.
         tof = codecs.getwriter('utf-8')(TemporaryFile())
-        show_tree_status(wt, to_file=tof, revision=revision)
+        show_tree_status(wt, to_file=tof, revision=revision, short=short)
         tof.seek(0)
         return tof.read().decode('utf-8')
 
@@ -75,6 +75,11 @@
                 '  hello.c\n',
             ],
             wt)
+        self.assertStatus([
+                '?  bye.c\n',
+                '?  hello.c\n',
+            ],
+            wt, short=True)
 
         # add a commit to allow showing pending merges.
         wt.commit('create a parent to allow testing merge output')
@@ -88,6 +93,12 @@
                 '  pending at pending-0-0\n',
             ],
             wt)
+        self.assertStatus([
+                '?  bye.c\n',
+                '?  hello.c\n',
+                'P  pending at pending-0-0\n',
+            ],
+            wt, short=True)
 
     def test_branch_status_revisions(self):
         """Tests branch status with revisions"""
@@ -154,16 +165,22 @@
         wt.add('test.c')
         wt.commit('testing')
         
+        self.assertStatus([
+                'unknown:\n',
+                '  bye.c\n',
+                '  dir2\n',
+                '  directory/hello.c\n'
+                ],
+                wt)
+
+        self.assertStatus([
+                '?  bye.c\n',
+                '?  dir2\n',
+                '?  directory/hello.c\n'
+                ],
+                wt, short=True)
+
         tof = StringIO()
-        show_tree_status(wt, to_file=tof)
-        tof.seek(0)
-        self.assertEquals(tof.readlines(),
-                          ['unknown:\n',
-                           '  bye.c\n',
-                           '  dir2\n',
-                           '  directory/hello.c\n'
-                           ])
-
         self.assertRaises(errors.PathsDoNotExist,
                           show_tree_status,
                           wt, specific_files=['bye.c','test.c','absent.c'], 
@@ -177,12 +194,22 @@
                            '  directory/hello.c\n'
                            ])
         tof = StringIO()
+        show_tree_status(wt, specific_files=['directory'], to_file=tof,
+                         short=True)
+        tof.seek(0)
+        self.assertEquals(tof.readlines(), ['?  directory/hello.c\n'])
+
+        tof = StringIO()
         show_tree_status(wt, specific_files=['dir2'], to_file=tof)
         tof.seek(0)
         self.assertEquals(tof.readlines(),
                           ['unknown:\n',
                            '  dir2\n'
                            ])
+        tof = StringIO()
+        show_tree_status(wt, specific_files=['dir2'], to_file=tof, short=True)
+        tof.seek(0)
+        self.assertEquals(tof.readlines(), ['?  dir2\n'])
 
     def test_status_nonexistent_file(self):
         # files that don't exist in either the basis tree or working tree
@@ -226,22 +253,36 @@
 
     def test_status(self):
         self.run_bzr("init")
+
         self.build_tree(['hello.txt'])
         result = self.run_bzr("status")[0]
         self.assert_("unknown:\n  hello.txt\n" in result, result)
+        result = self.run_bzr("status","--short")[0]
+        self.assert_("?  hello.txt\n" in result, result)
+
         self.run_bzr("add", "hello.txt")
         result = self.run_bzr("status")[0]
         self.assert_("added:\n  hello.txt\n" in result, result)
+        result = self.run_bzr("status","--short")[0]
+        self.assert_("A  hello.txt\n" in result, result)
+
         self.run_bzr("commit", "-m", "added")
         result = self.run_bzr("status", "-r", "0..1")[0]
         self.assert_("added:\n  hello.txt\n" in result, result)
+        result = self.run_bzr("status", "--short", "-r", "0..1")[0]
+        self.assert_("A  hello.txt\n" in result, result)
+
         self.build_tree(['world.txt'])
         result = self.run_bzr("status", "-r", "0")[0]
         self.assert_("added:\n  hello.txt\n" \
                      "unknown:\n  world.txt\n" in result, result)
-
         result2 = self.run_bzr("status", "-r", "0..")[0]
         self.assertEquals(result2, result)
+        result = self.run_bzr("status", "--short", "-r", "0")[0]
+        self.assert_("A  hello.txt\n" \
+                     "?  world.txt\n" in result, result)
+        result2 = self.run_bzr("status", "--short", "-r", "0..")[0]
+        self.assertEquals(result2, result)
 
 
 class TestStatusEncodings(TestCaseWithTransport):

=== modified directory  // last-changed:keir at cs.utoronto.ca-20061123185625-ndto
... 53ylcb8zo1y6
# revision id: keir at cs.utoronto.ca-20061123185625-ndto53ylcb8zo1y6
# sha1: 3d76579077cead9657b8790dab201a78e30805f8
# inventory sha1: e7b22fd304feef5ca5f8f74f94c0fd3b82cffe52
# parent ids:
#   keir at cs.utoronto.ca-20061122083620-jsqvusdnnxfmmvd3
# base id: pqm at pqm.ubuntu.com-20061121123418-3d0b2fb05cbe6b43
# properties:
#   branch-nick: bzr.shortstatus

# message:
#   Add a --short flag to status to get svn-style status
# committer: Keir Mierle <keir at cs.utoronto.ca>
# date: Wed 2006-11-22 03:36:20.407000065 -0500

=== modified file bzrlib/builtins.py // encoding:base64
LS0tIGJ6cmxpYi9idWlsdGlucy5weQorKysgYnpybGliL2J1aWx0aW5zLnB5CkBAIC0xMjgsMjYg
KzEyOCwyOSBAQAogICAgIFRoaXMgcmVwb3J0cyBvbiB2ZXJzaW9uZWQgYW5kIHVua25vd24gZmls
ZXMsIHJlcG9ydGluZyB0aGVtCiAgICAgZ3JvdXBlZCBieSBzdGF0ZS4gIFBvc3NpYmxlIHN0YXRl
cyBhcmU6CiAKLSAgICBhZGRlZAorICAgIGFkZGVkIC8gQQogICAgICAgICBWZXJzaW9uZWQgaW4g
dGhlIHdvcmtpbmcgY29weSBidXQgbm90IGluIHRoZSBwcmV2aW91cyByZXZpc2lvbi4KIAotICAg
IHJlbW92ZWQKKyAgICByZW1vdmVkIC8gRAogICAgICAgICBWZXJzaW9uZWQgaW4gdGhlIHByZXZp
b3VzIHJldmlzaW9uIGJ1dCByZW1vdmVkIG9yIGRlbGV0ZWQKICAgICAgICAgaW4gdGhlIHdvcmtp
bmcgY29weS4KIAotICAgIHJlbmFtZWQKKyAgICByZW5hbWVkIC8gUgogICAgICAgICBQYXRoIG9m
IHRoaXMgZmlsZSBjaGFuZ2VkIGZyb20gdGhlIHByZXZpb3VzIHJldmlzaW9uOwogICAgICAgICB0
aGUgdGV4dCBtYXkgYWxzbyBoYXZlIGNoYW5nZWQuICBUaGlzIGluY2x1ZGVzIGZpbGVzIHdob3Nl
CiAgICAgICAgIHBhcmVudCBkaXJlY3Rvcnkgd2FzIHJlbmFtZWQuCiAKLSAgICBtb2RpZmllZAor
ICAgIG1vZGlmaWVkIC8gTQogICAgICAgICBUZXh0IGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2
aW91cyByZXZpc2lvbi4KIAotICAgIHVua25vd24KKyAgICB1bmtub3duIC8gPwogICAgICAgICBO
b3QgdmVyc2lvbmVkIGFuZCBub3QgbWF0Y2hpbmcgYW4gaWdub3JlIHBhdHRlcm4uCiAKICAgICBU
byBzZWUgaWdub3JlZCBmaWxlcyB1c2UgJ2J6ciBpZ25vcmVkJy4gIEZvciBkZXRhaWxzIGluIHRo
ZQogICAgIGNoYW5nZXMgdG8gZmlsZSB0ZXh0cywgdXNlICdienIgZGlmZicuCisgICAgCisgICAg
LS1zaG9ydCBnaXZlcyBhIG9uZSBjaGFyYWN0ZXIgc3RhdHVzIGZsYWcgZm9yIGVhY2ggaXRlbSwg
c2ltaWxhcgorICAgIHRvIHRoZSBTVk4ncyBzdGF0dXMgY29tbWFuZC4KIAogICAgIElmIG5vIGFy
Z3VtZW50cyBhcmUgc3BlY2lmaWVkLCB0aGUgc3RhdHVzIG9mIHRoZSBlbnRpcmUgd29ya2luZwog
ICAgIGRpcmVjdG9yeSBpcyBzaG93bi4gIE90aGVyd2lzZSwgb25seSB0aGUgc3RhdHVzIG9mIHRo
ZSBzcGVjaWZpZWQKQEAgLTE2MSwyMCArMTY0LDIxIEBACiAgICAgIyBUT0RPOiAtLW5vLXJlY3Vy
c2UsIC0tcmVjdXJzZSBvcHRpb25zCiAgICAgCiAgICAgdGFrZXNfYXJncyA9IFsnZmlsZSonXQot
ICAgIHRha2VzX29wdGlvbnMgPSBbJ3Nob3ctaWRzJywgJ3JldmlzaW9uJ10KKyAgICB0YWtlc19v
cHRpb25zID0gWydzaG93LWlkcycsICdyZXZpc2lvbicsICdzaG9ydCddCiAgICAgYWxpYXNlcyA9
IFsnc3QnLCAnc3RhdCddCiAKICAgICBlbmNvZGluZ190eXBlID0gJ3JlcGxhY2UnCiAgICAgCiAg
ICAgQGRpc3BsYXlfY29tbWFuZAotICAgIGRlZiBydW4oc2VsZiwgc2hvd19pZHM9RmFsc2UsIGZp
bGVfbGlzdD1Ob25lLCByZXZpc2lvbj1Ob25lKToKKyAgICBkZWYgcnVuKHNlbGYsIHNob3dfaWRz
PUZhbHNlLCBmaWxlX2xpc3Q9Tm9uZSwgcmV2aXNpb249Tm9uZSwgc2hvcnQ9RmFsc2UpOgogICAg
ICAgICBmcm9tIGJ6cmxpYi5zdGF0dXMgaW1wb3J0IHNob3dfdHJlZV9zdGF0dXMKIAogICAgICAg
ICB0cmVlLCBmaWxlX2xpc3QgPSB0cmVlX2ZpbGVzKGZpbGVfbGlzdCkKICAgICAgICAgICAgIAog
ICAgICAgICBzaG93X3RyZWVfc3RhdHVzKHRyZWUsIHNob3dfaWRzPXNob3dfaWRzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWNpZmljX2ZpbGVzPWZpbGVfbGlzdCwgcmV2aXNpb249cmV2
aXNpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgdG9fZmlsZT1zZWxmLm91dGYpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgdG9fZmlsZT1zZWxmLm91dGYsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgc2hvcnQ9c2hvcnQpCiAKIAogY2xhc3MgY21kX2NhdF9yZXZpc2lvbihDb21tYW5k
KToKCg==

=== modified file bzrlib/delta.py // encoding:base64
LS0tIGJ6cmxpYi9kZWx0YS5weQorKysgYnpybGliL2RlbHRhLnB5CkBAIC05MCw5ICs5MCw5IEBA
CiAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICAgCiAKLSAgICBkZWYgc2hvdyhzZWxm
LCB0b19maWxlLCBzaG93X2lkcz1GYWxzZSwgc2hvd191bmNoYW5nZWQ9RmFsc2UpOgorICAgIGRl
ZiBzaG93KHNlbGYsIHRvX2ZpbGUsIHNob3dfaWRzPUZhbHNlLCBzaG93X3VuY2hhbmdlZD1GYWxz
ZSwgc2hvcnRfc3RhdHVzPUZhbHNlKToKICAgICAgICAgIiIib3V0cHV0IHRoaXMgZGVsdGEgaW4g
c3RhdHVzLWxpa2UgZm9ybSB0byB0b19maWxlLiIiIgotICAgICAgICBkZWYgc2hvd19saXN0KGZp
bGVzKToKKyAgICAgICAgZGVmIHNob3dfbGlzdChmaWxlcywgc2hvcnRfc3RhdHVzX2xldHRlcj0n
Jyk6CiAgICAgICAgICAgICBmb3IgaXRlbSBpbiBmaWxlczoKICAgICAgICAgICAgICAgICBwYXRo
LCBmaWQsIGtpbmQgPSBpdGVtWzozXQogCkBAIC0xMDcsMjAgKzEwNywyOSBAQAogICAgICAgICAg
ICAgICAgIGlmIHNob3dfaWRzOgogICAgICAgICAgICAgICAgICAgICBwcmludCA+PnRvX2ZpbGUs
ICcgICUtMzBzICVzJyAlIChwYXRoLCBmaWQpCiAgICAgICAgICAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgICAgICAgICAgcHJpbnQgPj50b19maWxlLCAnICcsIHBhdGgKKyAgICAgICAgICAgICAg
ICAgICAgcHJpbnQgPj50b19maWxlLCAnJXMgJXMnICUgKHNob3J0X3N0YXR1c19sZXR0ZXIsIHBh
dGgpCiAgICAgICAgICAgICAKICAgICAgICAgaWYgc2VsZi5yZW1vdmVkOgotICAgICAgICAgICAg
cHJpbnQgPj50b19maWxlLCAncmVtb3ZlZDonCi0gICAgICAgICAgICBzaG93X2xpc3Qoc2VsZi5y
ZW1vdmVkKQorICAgICAgICAgICAgaWYgbm90IHNob3J0X3N0YXR1czoKKyAgICAgICAgICAgICAg
ICBwcmludCA+PnRvX2ZpbGUsICdyZW1vdmVkOicKKyAgICAgICAgICAgICAgICBzaG93X2xpc3Qo
c2VsZi5yZW1vdmVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBzaG93X2xp
c3Qoc2VsZi5yZW1vdmVkLCAnRCcpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgIGlmIHNlbGYu
YWRkZWQ6Ci0gICAgICAgICAgICBwcmludCA+PnRvX2ZpbGUsICdhZGRlZDonCi0gICAgICAgICAg
ICBzaG93X2xpc3Qoc2VsZi5hZGRlZCkKKyAgICAgICAgICAgIGlmIG5vdCBzaG9ydF9zdGF0dXM6
CisgICAgICAgICAgICAgICAgcHJpbnQgPj50b19maWxlLCAnYWRkZWQ6JworICAgICAgICAgICAg
ICAgIHNob3dfbGlzdChzZWxmLmFkZGVkKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAg
ICAgICBzaG93X2xpc3Qoc2VsZi5hZGRlZCwgJ0EnKQogCiAgICAgICAgIGV4dHJhX21vZGlmaWVk
ID0gW10KIAogICAgICAgICBpZiBzZWxmLnJlbmFtZWQ6Ci0gICAgICAgICAgICBwcmludCA+PnRv
X2ZpbGUsICdyZW5hbWVkOicKKyAgICAgICAgICAgIHNob3J0X3N0YXR1c19sZXR0ZXIgPSAnUicK
KyAgICAgICAgICAgIGlmIG5vdCBzaG9ydF9zdGF0dXM6CisgICAgICAgICAgICAgICAgcHJpbnQg
Pj50b19maWxlLCAncmVuYW1lZDonCisgICAgICAgICAgICAgICAgc2hvcnRfc3RhdHVzX2xldHRl
ciA9ICcnCiAgICAgICAgICAgICBmb3IgKG9sZHBhdGgsIG5ld3BhdGgsIGZpZCwga2luZCwKICAg
ICAgICAgICAgICAgICAgdGV4dF9tb2RpZmllZCwgbWV0YV9tb2RpZmllZCkgaW4gc2VsZi5yZW5h
bWVkOgogICAgICAgICAgICAgICAgIGlmIHRleHRfbW9kaWZpZWQgb3IgbWV0YV9tb2RpZmllZDoK
QEAgLTEyOSwxOCArMTM4LDI2IEBACiAgICAgICAgICAgICAgICAgaWYgbWV0YV9tb2RpZmllZDoK
ICAgICAgICAgICAgICAgICAgICAgbmV3cGF0aCArPSAnKicKICAgICAgICAgICAgICAgICBpZiBz
aG93X2lkczoKLSAgICAgICAgICAgICAgICAgICAgcHJpbnQgPj50b19maWxlLCAnICAlcyA9PiAl
cyAlcycgJSAob2xkcGF0aCwgbmV3cGF0aCwgZmlkKQorICAgICAgICAgICAgICAgICAgICBwcmlu
dCA+PnRvX2ZpbGUsICclcyAgJXMgPT4gJXMgJXMnICUgKHNob3J0X3N0YXR1c19sZXR0ZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b2xkcGF0aCwgbmV3cGF0aCwgZmlkKQogICAgICAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAg
ICAgICAgICAgIHByaW50ID4+dG9fZmlsZSwgJyAgJXMgPT4gJXMnICUgKG9sZHBhdGgsIG5ld3Bh
dGgpCisgICAgICAgICAgICAgICAgICAgIHByaW50ID4+dG9fZmlsZSwgJyVzICAlcyA9PiAlcycg
JSAoc2hvcnRfc3RhdHVzX2xldHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvbGRwYXRoLCBuZXdwYXRoKQogICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgaWYgc2VsZi5tb2RpZmllZCBvciBleHRyYV9tb2RpZmllZDoKLSAgICAg
ICAgICAgIHByaW50ID4+dG9fZmlsZSwgJ21vZGlmaWVkOicKLSAgICAgICAgICAgIHNob3dfbGlz
dChzZWxmLm1vZGlmaWVkKQotICAgICAgICAgICAgc2hvd19saXN0KGV4dHJhX21vZGlmaWVkKQor
ICAgICAgICAgICAgc2hvcnRfc3RhdHVzX2xldHRlciA9ICdNJworICAgICAgICAgICAgaWYgbm90
IHNob3J0X3N0YXR1czoKKyAgICAgICAgICAgICAgICBwcmludCA+PnRvX2ZpbGUsICdtb2RpZmll
ZDonCisgICAgICAgICAgICAgICAgc2hvcnRfc3RhdHVzX2xldHRlciA9ICcnCisgICAgICAgICAg
ICBzaG93X2xpc3Qoc2VsZi5tb2RpZmllZCwgc2hvcnRfc3RhdHVzX2xldHRlcikKKyAgICAgICAg
ICAgIHNob3dfbGlzdChleHRyYV9tb2RpZmllZCwgc2hvcnRfc3RhdHVzX2xldHRlcikKICAgICAg
ICAgICAgIAogICAgICAgICBpZiBzaG93X3VuY2hhbmdlZCBhbmQgc2VsZi51bmNoYW5nZWQ6Ci0g
ICAgICAgICAgICBwcmludCA+PnRvX2ZpbGUsICd1bmNoYW5nZWQ6JwotICAgICAgICAgICAgc2hv
d19saXN0KHNlbGYudW5jaGFuZ2VkKQorICAgICAgICAgICAgaWYgbm90IHNob3J0X3N0YXR1czoK
KyAgICAgICAgICAgICAgICBwcmludCA+PnRvX2ZpbGUsICd1bmNoYW5nZWQ6JworICAgICAgICAg
ICAgICAgIHNob3dfbGlzdChzZWxmLnVuY2hhbmdlZCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgc2hvd19saXN0KHNlbGYudW5jaGFuZ2VkLCAnUycpCiAKIAogQGRlcHJlY2F0
ZWRfZnVuY3Rpb24oemVyb19uaW5lKQoK

=== modified file bzrlib/status.py // encoding:base64
LS0tIGJ6cmxpYi9zdGF0dXMucHkKKysrIGJ6cmxpYi9zdGF0dXMucHkKQEAgLTc2LDcgKzc2LDgg
QEAKICAgICAgICAgICAgICAgICAgICAgIHNob3dfaWRzPUZhbHNlLAogICAgICAgICAgICAgICAg
ICAgICAgdG9fZmlsZT1Ob25lLAogICAgICAgICAgICAgICAgICAgICAgc2hvd19wZW5kaW5nPVRy
dWUsCi0gICAgICAgICAgICAgICAgICAgICByZXZpc2lvbj1Ob25lKToKKyAgICAgICAgICAgICAg
ICAgICAgIHJldmlzaW9uPU5vbmUsCisgICAgICAgICAgICAgICAgICAgICBzaG9ydD1GYWxzZSk6
CiAgICAgIiIiRGlzcGxheSBzdW1tYXJ5IG9mIGNoYW5nZXMuCiAKICAgICBCeSBkZWZhdWx0IHRo
aXMgY29tcGFyZXMgdGhlIHdvcmtpbmcgdHJlZSB0byBhIHByZXZpb3VzIHJldmlzaW9uLiAKQEAg
LTEwMSw2ICsxMDIsNyBAQAogICAgICAgICBJZiBub3QgTm9uZSBpdCBtdXN0IGJlIGEgUmV2aXNp
b25TcGVjIGxpc3QuCiAgICAgICAgIElmIG9uZSByZXZpc2lvbiBzaG93IGNvbXBhcmVkIGl0IHdp
dGggd29ya2luZyB0cmVlLgogICAgICAgICBJZiB0d28gcmV2aXNpb25zIHNob3cgc3RhdHVzIGJl
dHdlZW4gZmlyc3QgYW5kIHNlY29uZC4KKyAgICA6cGFyYW0gc2hvcnQ6IElmIFRydWUsIGdpdmVz
IHNob3J0IFNWTi1zdHlsZSBzdGF0dXMgbGluZXMKICAgICAiIiIKICAgICBpZiBzaG93X3VuY2hh
bmdlZCBpcyBub3QgTm9uZToKICAgICAgICAgd2Fybigic2hvd19zdGF0dXNfdHJlZXMgd2l0aCBz
aG93X3VuY2hhbmdlZCBoYXMgYmVlbiBkZXByZWNhdGVkICIKQEAgLTEzNywxNiArMTM5LDIzIEBA
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpY19maWxlcz1zcGVjaWZpY19m
aWxlcykKICAgICAgICAgZGVsdGEuc2hvdyh0b19maWxlLAogICAgICAgICAgICAgICAgICAgIHNo
b3dfaWRzPXNob3dfaWRzLAotICAgICAgICAgICAgICAgICAgIHNob3dfdW5jaGFuZ2VkPXNob3df
dW5jaGFuZ2VkKQotCi0gICAgICAgIGxpc3RfcGF0aHMoJ3Vua25vd24nLCBuZXcudW5rbm93bnMo
KSwgc3BlY2lmaWNfZmlsZXMsIHRvX2ZpbGUpCisgICAgICAgICAgICAgICAgICAgc2hvd191bmNo
YW5nZWQ9c2hvd191bmNoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgc2hvcnRfc3RhdHVzPXNo
b3J0KQorICAgICAgICBzaG9ydF9zdGF0dXNfbGV0dGVyID0gJz8nCisgICAgICAgIGlmIG5vdCBz
aG9ydDoKKyAgICAgICAgICAgIHNob3J0X3N0YXR1c19sZXR0ZXIgPSAnJworICAgICAgICBsaXN0
X3BhdGhzKCd1bmtub3duJywgbmV3LnVua25vd25zKCksIHNwZWNpZmljX2ZpbGVzLCB0b19maWxl
LAorICAgICAgICAgICAgICAgICAgIHNob3J0X3N0YXR1c19sZXR0ZXIpCiAgICAgICAgIGNvbmZs
aWN0X3RpdGxlID0gRmFsc2UKICAgICAgICAgIyBzaG93IHRoZSBuZXcgY29uZmxpY3RzIG9ubHkg
Zm9yIG5vdy4gWFhYOiBnZXQgdGhlbSBmcm9tIHRoZSBkZWx0YS4KICAgICAgICAgZm9yIGNvbmZs
aWN0IGluIG5ldy5jb25mbGljdHMoKToKLSAgICAgICAgICAgIGlmIGNvbmZsaWN0X3RpdGxlIGlz
IEZhbHNlOgorICAgICAgICAgICAgaWYgbm90IHNob3J0IGFuZCBjb25mbGljdF90aXRsZSBpcyBG
YWxzZToKICAgICAgICAgICAgICAgICBwcmludCA+PiB0b19maWxlLCAiY29uZmxpY3RzOiIKICAg
ICAgICAgICAgICAgICBjb25mbGljdF90aXRsZSA9IFRydWUKLSAgICAgICAgICAgIHByaW50ID4+
IHRvX2ZpbGUsICIgICVzIiAlIGNvbmZsaWN0CisgICAgICAgICAgICBpZiBub3Qgc2hvcnQ6Cisg
ICAgICAgICAgICAgICAgcHJpbnQgPj4gdG9fZmlsZSwgIiAgJXMiICUgY29uZmxpY3QKKyAgICAg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgPj4gdG9fZmlsZSwgIkMgICVzIiAl
IGNvbmZsaWN0CiAgICAgICAgIGlmIG5ld19pc193b3JraW5nX3RyZWUgYW5kIHNob3dfcGVuZGlu
ZzoKICAgICAgICAgICAgIHNob3dfcGVuZGluZ19tZXJnZXMobmV3LCB0b19maWxlKQogICAgIGZp
bmFsbHk6CkBAIC0xOTIsMTIgKzIwMSwxMiBAQAogICAgICAgICBleGNlcHQgZXJyb3JzLk5vU3Vj
aFJldmlzaW9uOgogICAgICAgICAgICAgcHJpbnQgPj4gdG9fZmlsZSwgJyAnLCBtZXJnZQogICAg
ICAgICAKLWRlZiBsaXN0X3BhdGhzKGhlYWRlciwgcGF0aHMsIHNwZWNpZmljX2ZpbGVzLCB0b19m
aWxlKToKK2RlZiBsaXN0X3BhdGhzKGhlYWRlciwgcGF0aHMsIHNwZWNpZmljX2ZpbGVzLCB0b19m
aWxlLCBzaG9ydF9zdGF0dXNfbGV0dGVyPScnKToKICAgICBkb25lX2hlYWRlciA9IEZhbHNlCiAg
ICAgZm9yIHBhdGggaW4gcGF0aHM6CiAgICAgICAgIGlmIHNwZWNpZmljX2ZpbGVzIGFuZCBub3Qg
aXNfaW5zaWRlX2FueShzcGVjaWZpY19maWxlcywgcGF0aCk6CiAgICAgICAgICAgICBjb250aW51
ZQotICAgICAgICBpZiBub3QgZG9uZV9oZWFkZXI6CisgICAgICAgIGlmIG5vdCBzaG9ydF9zdGF0
dXNfbGV0dGVyIGFuZCBub3QgZG9uZV9oZWFkZXI6CiAgICAgICAgICAgICBwcmludCA+PnRvX2Zp
bGUsICclczonICUgaGVhZGVyCiAgICAgICAgICAgICBkb25lX2hlYWRlciA9IFRydWUKLSAgICAg
ICAgcHJpbnQgPj50b19maWxlLCAnICcsIHBhdGgKKyAgICAgICAgcHJpbnQgPj50b19maWxlLCAn
JXMgJXMnICUgKHNob3J0X3N0YXR1c19sZXR0ZXIsIHBhdGgpCgo=

=== modified directory  // last-changed:keir at cs.utoronto.ca-20061122083620-jsqv
... usdnnxfmmvd3
# revision id: keir at cs.utoronto.ca-20061122083620-jsqvusdnnxfmmvd3
# sha1: d93f0ef207317215ab88b0ed56cec59f3c2952b7
# inventory sha1: e9ad112b70c92e3219c64903f377301381c3ff4e
# parent ids:
#   pqm at pqm.ubuntu.com-20061121123418-3d0b2fb05cbe6b43
# properties:
#   branch-nick: bzr.shortstatus



More information about the bazaar mailing list