瀏覽代碼

Add wrapper for commit-tree.

Jelmer Vernooij 11 年之前
父節點
當前提交
b202c74278
共有 3 個文件被更改,包括 43 次插入1 次删除
  1. 11 1
      bin/dulwich
  2. 12 0
      dulwich/porcelain.py
  3. 20 0
      dulwich/tests/test_porcelain.py

+ 11 - 1
bin/dulwich

@@ -180,6 +180,15 @@ def cmd_commit(args):
     porcelain.commit(".", message=opts["--message"])
 
 
+def cmd_commit(args):
+    opts, args = getopt(args, "", ["message"])
+    if args == []:
+        print "usage: dulwich commit-tree tree"
+        sys.exit(1)
+    opts = dict(opts)
+    porcelain.commit_tree(".", tree=args[0], message=opts["--message"])
+
+
 def cmd_update_server_info(args):
     porcelain.update_server_info(".")
 
@@ -209,6 +218,8 @@ def cmd_diff_tree(args):
 
 commands = {
     "commit": cmd_commit,
+    "commit-tree": cmd_commit_tree,
+    "diff-tree": cmd_diff_tree,
     "fetch-pack": cmd_fetch_pack,
     "fetch": cmd_fetch,
     "dump-pack": cmd_dump_pack,
@@ -223,7 +234,6 @@ commands = {
     "add": cmd_add,
     "rm": cmd_rm,
     "show": cmd_show,
-    "diff-tree": cmd_diff_tree,
     }
 
 if len(sys.argv) < 2:

+ 12 - 0
dulwich/porcelain.py

@@ -31,6 +31,8 @@ Currently implemented:
  * add
  * clone
  * commit
+ * commit-tree
+ * diff-tree
  * init
  * remove
  * update-server-info
@@ -105,6 +107,16 @@ def commit(repo=".", message=None, author=None, committer=None):
         committer=committer)
 
 
+def commit_tree(repo, tree, message=None):
+    """Create a new commit object.
+
+    :param repo: Path to repository
+    :param tree: An existing tree object
+    """
+    r = open_repo(repo)
+    return r.do_commit(message=message, tree=tree)
+
+
 def init(path=".", bare=False):
     """Create a new git repository.
 

+ 20 - 0
dulwich/tests/test_porcelain.py

@@ -25,6 +25,10 @@ import tarfile
 import tempfile
 
 from dulwich import porcelain
+from dulwich.objects import (
+    Blob,
+    Tree,
+    )
 from dulwich.repo import Repo
 from dulwich.tests import (
     TestCase,
@@ -212,3 +216,19 @@ class DiffTreeTests(PorcelainTestCase):
         outstream = StringIO()
         porcelain.diff_tree(self.repo.path, c2.tree, c3.tree, outstream=outstream)
         self.assertEquals(outstream.getvalue(), "")
+
+
+class CommitTreeTests(PorcelainTestCase):
+
+    def test_simple(self):
+        c1, c2, c3 = build_commit_graph(self.repo.object_store, [[1], [2, 1],
+            [3, 1, 2]])
+        b = Blob()
+        b.data = "foo the bar"
+        t = Tree()
+        t.add("somename", 0100644, b.id)
+        self.repo.object_store.add_object(t)
+        self.repo.object_store.add_object(b)
+        sha = porcelain.commit_tree(self.repo.path, t.id, message="Withcommit.")
+        self.assertTrue(type(sha) is str)
+        self.assertEquals(len(sha), 40)