(name plumbing.ReferenceName)
| 893 | } |
| 894 | |
| 895 | func (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 |
| 948 | func (d *DotGit) processLine(line string) (*plumbing.Reference, error) { |
no test coverage detected