+
+
+class PackWriter_Remote(git.PackWriter):
+ def __init__(self, conn, objcache_maker=None, onclose=None):
+ git.PackWriter.__init__(self, objcache_maker)
+ self.file = conn
+ self.filename = 'remote socket'
+ self.onclose = onclose
+ self._packopen = False
+
+ def _open(self):
+ if not self._packopen:
+ self._make_objcache()
+ self.file.write('receive-objects\n')
+ self._packopen = True
+
+ def _end(self):
+ if self._packopen and self.file:
+ self.file.write('\0\0\0\0')
+ self._packopen = False
+ id = self.file.readline().strip()
+ self.file.check_ok()
+ self.objcache = None
+ return id
+
+ def close(self):
+ id = self._end()
+ self.file = None
+ return id
+
+ def abort(self):
+ raise GitError("don't know how to abort remote pack writing")
+
+ def _raw_write(self, datalist):
+ assert(self.file)
+ if not self._packopen:
+ self._open()
+ data = ''.join(datalist)
+ assert(len(data))
+ self.file.write(struct.pack('!I', len(data)) + data)
+ self.outbytes += len(data)
+ self.count += 1
+
+