Merge pull request #19 from thockin/master
Fix non-master branches and tags
This commit is contained in:
commit
1b8d34bc4d
32
main.go
32
main.go
|
|
@ -250,6 +250,11 @@ func updateSymlink(gitRoot, link, newDir string) error {
|
||||||
func addWorktreeAndSwap(gitRoot, dest, branch, rev, hash string) error {
|
func addWorktreeAndSwap(gitRoot, dest, branch, rev, hash string) error {
|
||||||
log.V(0).Infof("syncing to %s (%s)", rev, hash)
|
log.V(0).Infof("syncing to %s (%s)", rev, hash)
|
||||||
|
|
||||||
|
// Update from the remote.
|
||||||
|
if _, err := runCommand(gitRoot, "git", "fetch", "--tags", "origin", branch); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
// Make a worktree for this exact git hash.
|
// Make a worktree for this exact git hash.
|
||||||
worktreePath := path.Join(gitRoot, "rev-"+hash)
|
worktreePath := path.Join(gitRoot, "rev-"+hash)
|
||||||
_, err := runCommand(gitRoot, "git", "worktree", "add", worktreePath, "origin/"+branch)
|
_, err := runCommand(gitRoot, "git", "worktree", "add", worktreePath, "origin/"+branch)
|
||||||
|
|
@ -343,7 +348,7 @@ func syncRepo(repo, branch, rev string, depth int, gitRoot, dest string) error {
|
||||||
case err != nil:
|
case err != nil:
|
||||||
return fmt.Errorf("error checking if repo exists %q: %v", gitRepoPath, err)
|
return fmt.Errorf("error checking if repo exists %q: %v", gitRepoPath, err)
|
||||||
default:
|
default:
|
||||||
local, remote, err := getRevs(target, rev)
|
local, remote, err := getRevs(target, branch, rev)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -362,21 +367,23 @@ func syncRepo(repo, branch, rev string, depth int, gitRoot, dest string) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
// getRevs returns the local and upstream hashes for rev.
|
// getRevs returns the local and upstream hashes for rev.
|
||||||
func getRevs(localDir, rev string) (string, string, error) {
|
func getRevs(localDir, branch, rev string) (string, string, error) {
|
||||||
// Ask git what the exact hash is for rev.
|
// Ask git what the exact hash is for rev.
|
||||||
local, err := hashForRev(rev, localDir)
|
local, err := hashForRev(rev, localDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fetch rev from upstream.
|
// Build a ref string, depending on whether the user asked to track HEAD or a tag.
|
||||||
_, err = runCommand(localDir, "git", "fetch", "--tags", "origin", rev)
|
ref := ""
|
||||||
if err != nil {
|
if rev == "HEAD" {
|
||||||
return "", "", err
|
ref = "refs/heads/" + branch
|
||||||
|
} else {
|
||||||
|
ref = "refs/tags/" + rev + "^{}"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ask git what the exact hash is for upstream rev.
|
// Figure out what hash the remote resolves ref to.
|
||||||
remote, err := hashForRev("FETCH_HEAD", localDir)
|
remote, err := remoteHashForRef(ref, localDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", err
|
return "", "", err
|
||||||
}
|
}
|
||||||
|
|
@ -384,6 +391,15 @@ func getRevs(localDir, rev string) (string, string, error) {
|
||||||
return local, remote, nil
|
return local, remote, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func remoteHashForRef(ref, gitRoot string) (string, error) {
|
||||||
|
output, err := runCommand(gitRoot, "git", "ls-remote", "-q", "origin", ref)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
parts := strings.Split(string(output), "\t")
|
||||||
|
return parts[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
func cmdForLog(command string, args ...string) string {
|
func cmdForLog(command string, args ...string) string {
|
||||||
if strings.ContainsAny(command, " \t\n") {
|
if strings.ContainsAny(command, " \t\n") {
|
||||||
command = fmt.Sprintf("%q", command)
|
command = fmt.Sprintf("%q", command)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue