##// END OF EJS Templates
Delete bundle file of hg incoming in case of errors, preserve existing files....
Thomas Arendsen Hein -
r1974:0d54675c default
parent child Browse files
Show More
@@ -274,20 +274,32 b' def make_file(repo, r, pat, node=None,'
274 pathname),
274 pathname),
275 mode)
275 mode)
276
276
277 def write_bundle(cg, filename, compress=True, fh=None):
277 def write_bundle(cg, filename=None, compress=True):
278 """Write a bundle file, optionally without bz2 compression.
278 """Write a bundle file and return its filename.
279
279
280 A file handle (fh) may be passed and is guaranteed to be closed.
280 Existing files will not be overwritten.
281 If no filename is specified, a temporary file is created.
282 bz2 compression can be turned off.
283 The bundle file will be deleted in case of errors.
281 """
284 """
282 if fh is None:
283 fh = open(filename, "wb")
284
285 class nocompress(object):
285 class nocompress(object):
286 def compress(self, x):
286 def compress(self, x):
287 return x
287 return x
288 def flush(self):
288 def flush(self):
289 return ""
289 return ""
290
291 fh = None
292 cleanup = None
290 try:
293 try:
294 if filename:
295 if os.path.exists(filename):
296 raise util.Abort(_("file '%s' already exists"), filename)
297 fh = open(filename, "wb")
298 else:
299 fd, filename = tempfile.mkstemp(suffix=".hg", prefix="hg-bundle-")
300 fh = os.fdopen(fd, "wb")
301 cleanup = filename
302
291 if compress:
303 if compress:
292 fh.write("HG10")
304 fh.write("HG10")
293 z = bz2.BZ2Compressor(9)
305 z = bz2.BZ2Compressor(9)
@@ -300,11 +312,13 b' def write_bundle(cg, filename, compress='
300 break
312 break
301 fh.write(z.compress(chunk))
313 fh.write(z.compress(chunk))
302 fh.write(z.flush())
314 fh.write(z.flush())
303 except:
315 cleanup = None
304 fh.close()
316 return filename
305 os.unlink(filename)
317 finally:
306 raise
318 if fh is not None:
307 fh.close()
319 fh.close()
320 if cleanup is not None:
321 os.unlink(cleanup)
308
322
309 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
323 def dodiff(fp, ui, repo, node1, node2, files=None, match=util.always,
310 changes=None, text=False, opts={}):
324 changes=None, text=False, opts={}):
@@ -1782,41 +1796,37 b' def incoming(ui, repo, source="default",'
1782 return
1796 return
1783
1797
1784 cleanup = None
1798 cleanup = None
1785 fname = opts["bundle"]
1799 try:
1786 if fname:
1800 fname = opts["bundle"]
1787 # create a bundle (uncompressed if other repo is not local)
1801 if fname or not other.local():
1788 f = open(fname, "wb")
1802 # create a bundle (uncompressed if other repo is not local)
1789 elif not other.local():
1803 cg = other.changegroup(incoming, "incoming")
1790 # create an uncompressed temporary bundle
1804 fname = cleanup = write_bundle(cg, fname, compress=other.local())
1791 fd, fname = tempfile.mkstemp(suffix=".hg", prefix="hg-incoming-")
1805 # keep written bundle?
1792 f = os.fdopen(fd, "wb")
1806 if opts["bundle"]:
1793 cleanup = fname
1807 cleanup = None
1794
1808 if not other.local():
1795 if fname:
1809 # use the created uncompressed bundlerepo
1796 cg = other.changegroup(incoming, "incoming")
1810 other = bundlerepo.bundlerepository(ui, repo.root, fname)
1797 write_bundle(cg, fname, compress=other.local(), fh=f)
1811
1798 # write_bundle closed f for us.
1812 o = other.changelog.nodesbetween(incoming)[0]
1799 if not other.local():
1813 if opts['newest_first']:
1800 # use the created uncompressed bundlerepo
1814 o.reverse()
1801 other = bundlerepo.bundlerepository(ui, repo.root, fname)
1815 displayer = show_changeset(ui, other, opts)
1802
1816 for n in o:
1803 o = other.changelog.nodesbetween(incoming)[0]
1817 parents = [p for p in other.changelog.parents(n) if p != nullid]
1804 if opts['newest_first']:
1818 if opts['no_merges'] and len(parents) == 2:
1805 o.reverse()
1819 continue
1806 displayer = show_changeset(ui, other, opts)
1820 displayer.show(changenode=n)
1807 for n in o:
1821 if opts['patch']:
1808 parents = [p for p in other.changelog.parents(n) if p != nullid]
1822 prev = (parents and parents[0]) or nullid
1809 if opts['no_merges'] and len(parents) == 2:
1823 dodiff(ui, ui, other, prev, n)
1810 continue
1824 ui.write("\n")
1811 displayer.show(changenode=n)
1825 finally:
1812 if opts['patch']:
1826 if hasattr(other, 'close'):
1813 prev = (parents and parents[0]) or nullid
1827 other.close()
1814 dodiff(ui, ui, other, prev, n)
1828 if cleanup:
1815 ui.write("\n")
1829 os.unlink(cleanup)
1816
1817 if cleanup:
1818 other.close() # explicit close for unlink
1819 os.unlink(cleanup)
1820
1830
1821 def init(ui, dest="."):
1831 def init(ui, dest="."):
1822 """create a new repository in the given directory
1832 """create a new repository in the given directory
General Comments 0
You need to be logged in to leave comments. Login now