Add porcelain for diff-tree.
authorJelmer Vernooij <jelmer@samba.org>
Sun, 27 Oct 2013 08:25:02 +0000 (09:25 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sun, 27 Oct 2013 08:25:02 +0000 (09:25 +0100)
bin/dulwich
dulwich/porcelain.py
dulwich/tests/test_porcelain.py

index 33217a75fb5a3181a58cd041d78c32b0ddc0cf24..0a2243ef9f9380a6baf5edd47c61acb64a313d04 100755 (executable)
@@ -199,6 +199,14 @@ def cmd_show(args):
     porcelain.show(".")
 
 
+def cmd_diff_tree(args):
+    opts, args = getopt(args, "", [])
+    if len(args) < 2:
+        print "Usage: dulwich diff-tree OLD-TREE NEW-TREE"
+        sys.exit(1)
+    porcelain.diff_tree(".", args[0], args[1])
+
+
 commands = {
     "commit": cmd_commit,
     "fetch-pack": cmd_fetch_pack,
@@ -215,6 +223,7 @@ commands = {
     "add": cmd_add,
     "rm": cmd_rm,
     "show": cmd_show,
+    "diff-tree": cmd_diff_tree,
     }
 
 if len(sys.argv) < 2:
index e0c8ce0915790a45d515045483bd81a42bd74e99..7e91420cb426de1bddfb9abe1004073413e5d1d6 100644 (file)
@@ -215,3 +215,15 @@ def show(repo=".", committish=None, outstream=sys.stdout):
     parent_commit = r[commit.parents[0]]
     print_commit(commit, outstream)
     write_tree_diff(outstream, r.object_store, parent_commit.tree, commit.tree)
+
+
+def diff_tree(repo, old_tree, new_tree, outstream=sys.stdout):
+    """Compares the content and mode of blobs found via two tree objects.
+
+    :param repo: Path to repository
+    :param old_tree: Id of old tree
+    :param new_tree: Id of new tree
+    :param outstream: Stream to write to
+    """
+    r = open_repo(repo)
+    write_tree_diff(outstream, r.object_store, old_tree, new_tree)
index bcc26f49ec45dd00b25bab1b2b4fa355fd0cc6c3..80d70127d34258bdfbd5209ef8f48f0fb2ebdf82 100644 (file)
@@ -201,3 +201,14 @@ class SymbolicRefTests(PorcelainTestCase):
         #test if we actually changed the file
         new_ref = self.repo.get_named_file('HEAD').read()
         self.assertEqual(new_ref, 'ref: refs/heads/develop\n')
+
+
+class DiffTreeTests(PorcelainTestCase):
+
+    def test_empty(self):
+        c1, c2, c3 = build_commit_graph(self.repo.object_store, [[1], [2, 1],
+            [3, 1, 2]])
+        self.repo.refs["HEAD"] = c3.id
+        outstream = StringIO()
+        porcelain.diff_tree(self.repo.path, c2.tree, c3.tree, outstream=outstream)
+        self.assertEquals(outstream.getvalue(), "")