MCPcopy
hub / github.com/go-git/go-git / createNewObjectPack

Method createNewObjectPack

repository.go:1832–1878  ·  view source on GitHub ↗

createNewObjectPack is a helper for RepackObjects taking care of creating a new pack. It is used so the PackfileWriter deferred close has the right scope.

(cfg *RepackConfig)

Source from the content-addressed store, hash-verified

1830// of creating a new pack. It is used so the PackfileWriter
1831// deferred close has the right scope.
1832func (r *Repository) createNewObjectPack(cfg *RepackConfig) (h plumbing.Hash, err error) {
1833 ow := newObjectWalker(r.Storer)
1834 err = ow.walkAllRefs()
1835 if err != nil {
1836 return h, err
1837 }
1838 objs := make([]plumbing.Hash, 0, len(ow.seen))
1839 for h := range ow.seen {
1840 objs = append(objs, h)
1841 }
1842 pfw, ok := r.Storer.(storer.PackfileWriter)
1843 if !ok {
1844 return h, fmt.Errorf("Repository storer is not a storer.PackfileWriter")
1845 }
1846 wc, err := pfw.PackfileWriter()
1847 if err != nil {
1848 return h, err
1849 }
1850 defer ioutil.CheckClose(wc, &err)
1851 scfg, err := r.Config()
1852 if err != nil {
1853 return h, err
1854 }
1855 enc := packfile.NewEncoder(wc, r.Storer, cfg.UseRefDeltas)
1856 h, err = enc.Encode(objs, scfg.Pack.Window)
1857 if err != nil {
1858 return h, err
1859 }
1860
1861 // Delete the packed, loose objects.
1862 if los, ok := r.Storer.(storer.LooseObjectStorer); ok {
1863 err = los.ForEachObjectHash(func(hash plumbing.Hash) error {
1864 if ow.isSeen(hash) {
1865 err = los.DeleteLooseObject(hash)
1866 if err != nil {
1867 return err
1868 }
1869 }
1870 return nil
1871 })
1872 if err != nil {
1873 return h, err
1874 }
1875 }
1876
1877 return h, err
1878}
1879
1880func expandPartialHash(st storer.EncodedObjectStorer, prefix []byte) (hashes []plumbing.Hash) {
1881 // The fast version is implemented by storage/filesystem.ObjectStorage.

Callers 1

RepackObjectsMethod · 0.95

Calls 10

ConfigMethod · 0.95
EncodeMethod · 0.95
CheckCloseFunction · 0.92
NewEncoderFunction · 0.92
newObjectWalkerFunction · 0.85
walkAllRefsMethod · 0.80
isSeenMethod · 0.80
PackfileWriterMethod · 0.65
ForEachObjectHashMethod · 0.65
DeleteLooseObjectMethod · 0.65

Tested by

no test coverage detected