فهرست منبع

Add tag_delete porcelain.

Jelmer Vernooij 10 سال پیش
والد
کامیت
30b14a67ff
3فایلهای تغییر یافته به همراه31 افزوده شده و 1 حذف شده
  1. 2 0
      NEWS
  2. 18 1
      dulwich/porcelain.py
  3. 11 0
      dulwich/tests/test_porcelain.py

+ 2 - 0
NEWS

@@ -23,6 +23,8 @@
 
   * Add 'fetch' porcelain. (Jelmer Vernooij)
 
+  * Add 'tag_delete' porcelain. (Jelmer Vernooij)
+
  CHANGES
 
   * dul-web is now available as 'dulwich web-daemon'.

+ 18 - 1
dulwich/porcelain.py

@@ -35,7 +35,7 @@ Currently implemented:
  * receive-pack
  * reset
  * rev-list
- * tag{_create,_list}
+ * tag{_create,_delete,_list}
  * upload-pack
  * update-server-info
  * status
@@ -447,6 +447,23 @@ def tag_list(repo, outstream=sys.stdout):
     return tags
 
 
+def tag_delete(repo, name):
+    """Remove a tag.
+
+    :param repo: Path to repository
+    :param name: Name of tag to remove
+    """
+    r = open_repo(repo)
+    if isinstance(name, str):
+        names = [name]
+    elif isinstance(name, list):
+        names = name
+    else:
+        raise TypeError("Unexpected tag name type %r" % name)
+    for name in names:
+        del r.refs["refs/tags/" + name]
+
+
 def reset(repo, mode, committish="HEAD"):
     """Reset current HEAD to the specified state.
 

+ 11 - 0
dulwich/tests/test_porcelain.py

@@ -393,6 +393,17 @@ class TagListTests(PorcelainTestCase):
         self.assertEqual(["bar/bla", "foo"], tags)
 
 
+class TagDeleteTests(PorcelainTestCase):
+
+    def test_simple(self):
+        [c1] = build_commit_graph(self.repo.object_store, [[1]])
+        self.repo["HEAD"] = c1.id
+        porcelain.tag_create(self.repo, 'foo')
+        self.assertTrue("foo" in porcelain.tag_list(self.repo))
+        porcelain.tag_delete(self.repo, 'foo')
+        self.assertFalse("foo" in porcelain.tag_list(self.repo))
+
+
 class ResetTests(PorcelainTestCase):
 
     def test_hard_head(self):