--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/infinitepush/common.py Fri Feb 09 13:39:15 2018 +0530
@@ -0,0 +1,58 @@
+# Copyright 2017 Facebook, Inc.
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+from __future__ import absolute_import
+
+import json
+import os
+import struct
+import tempfile
+
+from mercurial.node import hex
+
+from mercurial import (
+ error,
+ extensions,
+)
+
+def isremotebooksenabled(ui):
+ return ('remotenames' in extensions._extensions and
+ ui.configbool('remotenames', 'bookmarks'))
+
+def encodebookmarks(bookmarks):
+ encoded = {}
+ for bookmark, node in bookmarks.iteritems():
+ encoded[bookmark] = node
+ dumped = json.dumps(encoded)
+ result = struct.pack('>i', len(dumped)) + dumped
+ return result
+
+def downloadbundle(repo, unknownbinhead):
+ index = repo.bundlestore.index
+ store = repo.bundlestore.store
+ bundleid = index.getbundle(hex(unknownbinhead))
+ if bundleid is None:
+ raise error.Abort('%s head is not known' % hex(unknownbinhead))
+ bundleraw = store.read(bundleid)
+ return _makebundlefromraw(bundleraw)
+
+def _makebundlefromraw(data):
+ fp = None
+ fd, bundlefile = tempfile.mkstemp()
+ try: # guards bundlefile
+ try: # guards fp
+ fp = os.fdopen(fd, 'wb')
+ fp.write(data)
+ finally:
+ fp.close()
+ except Exception:
+ try:
+ os.unlink(bundlefile)
+ except Exception:
+ # we would rather see the original exception
+ pass
+ raise
+
+ return bundlefile