ソースを参照

Cleanup directory after clone fails. Fixes #733.

Jelmer Vernooij 5 年 前
コミット
acdc0ac902
3 ファイル変更10 行追加0 行削除
  1. 2 0
      NEWS
  2. 2 0
      dulwich/porcelain.py
  3. 6 0
      dulwich/tests/test_porcelain.py

+ 2 - 0
NEWS

@@ -11,6 +11,8 @@
  * Add a ``dulwich.porcelain.active_branch`` function.
    (Jelmer Vernooij)
 
+ * Cleanup new directory if clone fails. (Jelmer Vernooij, #733)
+
 0.19.13	2019-08-19
 
  BUG FIXES

+ 2 - 0
dulwich/porcelain.py

@@ -65,6 +65,7 @@ from io import BytesIO, RawIOBase
 import datetime
 import os
 import posixpath
+import shutil
 import stat
 import sys
 import time
@@ -382,6 +383,7 @@ def clone(source, target=None, bare=False, checkout=None,
             errstream.write(b'Checking out ' + head.id + b'\n')
             r.reset_index(head.tree)
     except BaseException:
+        shutil.rmtree(target)
         r.close()
         raise
 

+ 6 - 0
dulwich/tests/test_porcelain.py

@@ -351,6 +351,12 @@ class CloneTests(PorcelainTestCase):
             self.repo.path, target_path, checkout=True, errstream=errstream)
         r.close()
 
+    def test_source_broken(self):
+        target_path = tempfile.mkdtemp()
+        self.assertRaises(
+            Exception, porcelain.clone, '/nonexistant/repo', target_path)
+        self.assertFalse(os.path.exists(target_path))
+
 
 class InitTests(TestCase):