MCPcopy
hub / github.com/redspread/spread / Pull

Method Pull

pkg/project/pull.go:15–86  ·  view source on GitHub ↗

Pull fetches refspec from remoteName and merges them on top of HEAD.

(remoteName, refspec string)

Source from the content-addressed store, hash-verified

13
14// Pull fetches refspec from remoteName and merges them on top of HEAD.
15func (p *Project) Pull(remoteName, refspec string) error {
16 // fetch from remote
17 if err := p.Fetch(remoteName, refspec); err != nil {
18 return err
19 }
20
21 // if branch, use remote branch ref
22 branchName := ""
23 if strings.HasPrefix(refspec, branchRef) {
24 branchName = strings.TrimPrefix(refspec, branchRef)
25 refspec = fmt.Sprintf("refs/remotes/%s/%s", remoteName, branchName)
26 }
27
28 ref, err := p.repo.References.Lookup(refspec)
29 if err != nil {
30 return err
31 }
32
33 // get annotated commit of fetched branch's tip
34 aCommit, err := p.repo.AnnotatedCommitFromRef(ref)
35 if err != nil {
36 return err
37 }
38
39 head, err := p.repo.Head()
40 // create new branch for head if doesn't exist
41 if err != nil && strings.HasSuffix(err.Error(), "not found") {
42 branch := "master"
43 if len(branchName) != 0 {
44 branch = branchName
45 }
46
47 commit, err := ref.Peel(git.ObjectCommit)
48 if err != nil {
49 return err
50 }
51
52 if _, err = p.repo.CreateBranch(branch, commit.(*git.Commit), false); err != nil {
53 return err
54 }
55
56 return p.repo.SetHead(fmt.Sprintf("refs/heads/%s", branch))
57 } else if err != nil {
58 return err
59 }
60
61 path, err := p.TempWorkdir()
62 if err != nil {
63 return fmt.Errorf("could not setup temporary working directory: %v", err)
64 }
65 defer p.CleanupWorkdir(path)
66
67 // Perform analysis of merge
68 mergeHeads := []*git.AnnotatedCommit{aCommit}
69 analysis, _, err := p.repo.MergeAnalysis(mergeHeads)
70 if err != nil {
71 return err
72 }

Callers

nothing calls this directly

Calls 6

FetchMethod · 0.95
TempWorkdirMethod · 0.95
CleanupWorkdirMethod · 0.95
fastForwardMethod · 0.95
mergeMethod · 0.95
HeadMethod · 0.80

Tested by

no test coverage detected