@@ -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
@@ -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
@@ -351,6 +351,12 @@ class CloneTests(PorcelainTestCase):
self.repo.path, target_path, checkout=True, errstream=errstream)
+ 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):