소스 검색

Implement porcelain.remote_remove(). Fixes #923

Jelmer Vernooij 2 년 전
부모
커밋
d6f6b6696c
3개의 변경된 파일33개의 추가작업 그리고 0개의 파일을 삭제
  1. 3 0
      NEWS
  2. 16 0
      dulwich/porcelain.py
  3. 14 0
      dulwich/tests/test_porcelain.py

+ 3 - 0
NEWS

@@ -3,6 +3,9 @@
  * Avoid making an extra copy when fetching pack files.
    (Jelmer Vernooij)
 
+ * Add ``porcelain.remote_remove``.
+   (Jelmer Vernooij, #923)
+
 0.20.36	2022-05-15
 
  * Add ``walk_untracked`` argument to ``porcelain.status``.

+ 16 - 0
dulwich/porcelain.py

@@ -1655,6 +1655,22 @@ def remote_add(repo: Repo, name: Union[bytes, str], url: Union[bytes, str]):
         c.write_to_path()
 
 
+def remote_remove(repo: Repo, name: Union[bytes, str]):
+    """Remove a remote
+
+    Args:
+      repo: Path to the repository
+      name: Remote name
+    """
+    if not isinstance(name, bytes):
+        name = name.encode(DEFAULT_ENCODING)
+    with open_repo_closing(repo) as r:
+        c = r.get_config()
+        section = (b"remote", name)
+        del c[section]
+        c.write_to_path()
+
+
 def check_ignore(repo, paths, no_index=False):
     """Debug gitignore files.
 

+ 14 - 0
dulwich/tests/test_porcelain.py

@@ -2563,6 +2563,20 @@ class RemoteAddTests(PorcelainTestCase):
         )
 
 
+class RemoteRemoveTests(PorcelainTestCase):
+    def test_remove(self):
+        porcelain.remote_add(self.repo, "jelmer", "git://jelmer.uk/code/dulwich")
+        c = self.repo.get_config()
+        self.assertEqual(
+            c.get((b"remote", b"jelmer"), b"url"),
+            b"git://jelmer.uk/code/dulwich",
+        )
+        porcelain.remote_remove(self.repo, "jelmer")
+        self.assertRaises(KeyError, porcelain.remote_remove, self.repo, "jelmer")
+        c = self.repo.get_config()
+        self.assertRaises(KeyError, c.get, (b"remote", b"jelmer"), b"url")
+
+
 class CheckIgnoreTests(PorcelainTestCase):
     def test_check_ignored(self):
         with open(os.path.join(self.repo.path, ".gitignore"), "w") as f: