MCPcopy
hub / github.com/github/git-sizer / initialize

Method initialize

sizes/graph.go:555–623  ·  view source on GitHub ↗

Initialize `r` (which is empty) based on `tree`.

(g *Graph, oid git.OID, tree *git.Tree)

Source from the content-addressed store, hash-verified

553
554// Initialize `r` (which is empty) based on `tree`.
555func (r *treeRecord) initialize(g *Graph, oid git.OID, tree *git.Tree) error {
556 r.lock.Lock()
557 defer r.lock.Unlock()
558
559 r.objectSize = tree.Size()
560 r.pending = 0
561
562 iter := tree.Iter()
563 for {
564 entry, ok, err := iter.NextEntry()
565 if err != nil {
566 return err
567 }
568 if !ok {
569 break
570 }
571 name := entry.Name
572
573 switch {
574 case entry.Filemode&0o170000 == 0o40000:
575 // Tree
576 listener := func(size TreeSize) {
577 // This listener is called when the tree pointed to by
578 // `entry` has been fully processed.
579 r.lock.Lock()
580 defer r.lock.Unlock()
581
582 g.pathResolver.RecordTreeEntry(oid, name, entry.OID)
583
584 r.size.addDescendent(name, size)
585 r.pending--
586 // This might inform *our* listeners that we are now
587 // fully processed:
588 r.maybeFinalize(g)
589 }
590 treeSize, ok := g.RequireTreeSize(entry.OID, listener)
591 if ok {
592 r.size.addDescendent(name, treeSize)
593 } else {
594 r.pending++
595 }
596 r.entryCount.Increment(1)
597
598 case entry.Filemode&0o170000 == 0o160000:
599 // Commit (i.e., submodule)
600 r.size.addSubmodule(name)
601 r.entryCount.Increment(1)
602
603 case entry.Filemode&0o170000 == 0o120000:
604 // Symlink
605 g.pathResolver.RecordTreeEntry(oid, name, entry.OID)
606
607 r.size.addLink(name)
608 r.entryCount.Increment(1)
609
610 default:
611 // Blob
612 g.pathResolver.RecordTreeEntry(oid, name, entry.OID)

Callers

nothing calls this directly

Calls 12

maybeFinalizeMethod · 0.95
SizeMethod · 0.80
IterMethod · 0.80
NextEntryMethod · 0.80
addDescendentMethod · 0.80
RequireTreeSizeMethod · 0.80
addSubmoduleMethod · 0.80
addLinkMethod · 0.80
GetBlobSizeMethod · 0.80
addBlobMethod · 0.80
RecordTreeEntryMethod · 0.65
IncrementMethod · 0.45

Tested by

no test coverage detected