Quellcode durchsuchen

Add porcelain for 'dulwich rev-list'.

Jelmer Vernooij vor 11 Jahren
Ursprung
Commit
b1375ef538
3 geänderte Dateien mit 32 neuen und 0 gelöschten Zeilen
  1. 6 0
      bin/dulwich
  2. 13 0
      dulwich/porcelain.py
  3. 13 0
      dulwich/tests/test_porcelain.py

+ 6 - 0
bin/dulwich

@@ -216,6 +216,11 @@ def cmd_diff_tree(args):
     porcelain.diff_tree(".", args[0], args[1])
 
 
+def cmd_rev_list(args):
+    opts, args = getopt(args, "", [])
+    porcelain.rev_list(".", args)
+
+
 commands = {
     "commit": cmd_commit,
     "commit-tree": cmd_commit_tree,
@@ -234,6 +239,7 @@ commands = {
     "add": cmd_add,
     "rm": cmd_rm,
     "show": cmd_show,
+    "rev-list": cmd_rev_list,
     }
 
 if len(sys.argv) < 2:

+ 13 - 0
dulwich/porcelain.py

@@ -35,6 +35,7 @@ Currently implemented:
  * diff-tree
  * init
  * remove
+ * rev-list
  * update-server-info
  * symbolic-ref
 
@@ -242,3 +243,15 @@ def diff_tree(repo, old_tree, new_tree, outstream=sys.stdout):
     """
     r = open_repo(repo)
     write_tree_diff(outstream, r.object_store, old_tree, new_tree)
+
+
+def rev_list(repo, commits, outstream=sys.stdout):
+    """Lists commit objects in reverse chronological order.
+
+    :param repo: Path to repository
+    :param commits: Commits over which to iterate
+    :param outstream: Stream to write to
+    """
+    r = open_repo(repo)
+    for entry in r.get_walker(include=[r[c].id for c in commits]):
+        outstream.write("%s\n" % entry.commit.id)

+ 13 - 0
dulwich/tests/test_porcelain.py

@@ -227,3 +227,16 @@ class CommitTreeTests(PorcelainTestCase):
             committer="Jane <jane@example.com>")
         self.assertTrue(type(sha) is str)
         self.assertEquals(len(sha), 40)
+
+
+class RevListTests(PorcelainTestCase):
+
+    def test_simple(self):
+        c1, c2, c3 = build_commit_graph(self.repo.object_store, [[1], [2, 1],
+            [3, 1, 2]])
+        outstream = StringIO()
+        porcelain.rev_list(
+            self.repo.path, [c3.id], outstream=outstream)
+        self.assertEquals(
+            "%s\n%s\n%s\n" % (c3.id, c2.id, c1.id),
+            outstream.getvalue())