/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to transportgit.py

Support the git smart server http protocol.

Show diffs side-by-side

added added

removed removed

Lines of Context:
33
33
    MemoryPackIndex,
34
34
    PackData,
35
35
    Pack,
36
 
    ThinPackData,
37
36
    iter_sha1,
38
37
    load_pack_index_file,
39
38
    write_pack_data,
42
41
from dulwich.repo import (
43
42
    BaseRepo,
44
43
    RefsContainer,
 
44
    BASE_DIRECTORIES,
45
45
    INDEX_FILENAME,
46
46
    OBJECTDIR,
47
47
    REFSDIR,
312
312
        except NoSuchFile:
313
313
            return None
314
314
 
 
315
    def _put_named_file(self, relpath, contents):
 
316
        self._controltransport.put_bytes(relpath, contents)
 
317
 
315
318
    def index_path(self):
316
319
        """Return the path to the index file."""
317
320
        return self._controltransport.local_abspath(INDEX_FILENAME)
332
335
    def __repr__(self):
333
336
        return "<%s for %r>" % (self.__class__.__name__, self.transport)
334
337
 
 
338
    @classmethod
 
339
    def init(cls, transport, bare=False):
 
340
        if not bare:
 
341
            transport.mkdir(".git")
 
342
            control_transport = transport.clone(".git")
 
343
        else:
 
344
            control_transport = transport
 
345
        for d in BASE_DIRECTORIES:
 
346
            control_transport.mkdir("/".join(d))
 
347
        control_transport.mkdir(OBJECTDIR)
 
348
        TransportObjectStore.init(control_transport.clone(OBJECTDIR))
 
349
        ret = cls(transport)
 
350
        ret.refs.set_symbolic_ref("HEAD", "refs/heads/master")
 
351
        ret._init_files(bare)
 
352
        return ret
 
353
 
335
354
 
336
355
class TransportObjectStore(PackBasedObjectStore):
337
356
    """Git-style object store that exists on disk."""
473
492
        :param path: Path to the pack file.
474
493
        """
475
494
        f.seek(0)
476
 
        data = ThinPackData.from_file(self.get_raw, f, len(f.getvalue()))
 
495
        data = PackData.from_file(self.get_raw, f, len(f.getvalue()))
477
496
        idx = MemoryPackIndex(data.sorted_entries(), data.get_stored_checksum())
478
497
        p = Pack.from_objects(data, idx)
479
498
 
480
499
        pack_sha = idx.objects_sha1()
481
500
 
482
 
        datafile = self.pack_transport.open_write_stream("pack-%s.pack" % pack_sha)
 
501
        datafile = self.pack_transport.open_write_stream(
 
502
                "pack-%s.pack" % pack_sha)
483
503
        try:
484
 
            entries, data_sum = write_pack_data(datafile, ((o, None) for o in p.iterobjects()), len(p))
 
504
            entries, data_sum = write_pack_data(datafile, p.pack_tuples())
485
505
        finally:
486
506
            datafile.close()
487
507
        entries.sort()
488
 
        idxfile = self.pack_transport.open_write_stream("pack-%s.idx" % pack_sha)
 
508
        idxfile = self.pack_transport.open_write_stream(
 
509
            "pack-%s.idx" % pack_sha)
489
510
        try:
490
511
            write_pack_index_v2(idxfile, data.sorted_entries(), data_sum)
491
512
        finally: