MCPcopy Index your code
hub / github.com/go-git/go-git / rewritePackedRefsWithoutRef

Method rewritePackedRefsWithoutRef

storage/filesystem/dotgit/dotgit.go:895–945  ·  view source on GitHub ↗
(name plumbing.ReferenceName)

Source from the content-addressed store, hash-verified

893}
894
895func (d *DotGit) rewritePackedRefsWithoutRef(name plumbing.ReferenceName) (err error) {
896 pr, err := d.openAndLockPackedRefs(false)
897 if err != nil {
898 return err
899 }
900 if pr == nil {
901 return nil
902 }
903 defer ioutil.CheckClose(pr, &err)
904
905 // Creating the temp file in the same directory as the target file
906 // improves our chances for rename operation to be atomic.
907 tmp, err := d.fs.TempFile("", tmpPackedRefsPrefix)
908 if err != nil {
909 return err
910 }
911 tmpName := tmp.Name()
912 defer func() {
913 ioutil.CheckClose(tmp, &err)
914 _ = d.fs.Remove(tmpName) // don't check err, we might have renamed it
915 }()
916
917 s := bufio.NewScanner(pr)
918 found := false
919 for s.Scan() {
920 line := s.Text()
921 ref, err := d.processLine(line)
922 if err != nil {
923 return err
924 }
925
926 if ref != nil && ref.Name() == name {
927 found = true
928 continue
929 }
930
931 if _, err := fmt.Fprintln(tmp, line); err != nil {
932 return err
933 }
934 }
935
936 if err := s.Err(); err != nil {
937 return err
938 }
939
940 if !found {
941 return nil
942 }
943
944 return d.rewritePackedRefsWhileLocked(tmp, pr)
945}
946
947// process lines from a packed-refs file
948func (d *DotGit) processLine(line string) (*plumbing.Reference, error) {

Callers 1

RemoveRefMethod · 0.95

Calls 9

openAndLockPackedRefsMethod · 0.95
processLineMethod · 0.95
CheckCloseFunction · 0.92
ScanMethod · 0.80
ErrMethod · 0.80
NameMethod · 0.65
TempFileMethod · 0.45
RemoveMethod · 0.45

Tested by

no test coverage detected