Merge pull request #608 from sinbad/push-other-branch

Fix pushing other branches
This commit is contained in:
risk danger olson 2015-08-26 16:21:16 -06:00
commit 965ddbb10d
3 changed files with 47 additions and 24 deletions

@ -90,7 +90,7 @@ func prePushCommand(cmd *cobra.Command, args []string) {
for _, pointer := range pointers {
if prePushDryRun {
Print("push %s", pointer.Name)
Print("push %s [%s]", pointer.Name, pointer.Oid)
continue
}

@ -3,7 +3,6 @@ package commands
import (
"io/ioutil"
"os"
"strings"
"github.com/github/git-lfs/git"
"github.com/github/git-lfs/lfs"
@ -26,11 +25,29 @@ var (
)
func uploadsBetweenRefs(left string, right string) *lfs.TransferQueue {
tracerx.Printf("Upload between %v and %v", left, right)
// Just use scanner here
pointers, err := lfs.ScanRefs(left, right, nil)
if err != nil {
Panic(err, "Error scanning for Git LFS files")
}
return uploadPointers(pointers)
}
func uploadsBetweenRefAndRemote(ref, remote string) *lfs.TransferQueue {
tracerx.Printf("Upload between %v and remote %v", ref, remote)
scanOpt := &lfs.ScanRefsOptions{ScanMode: lfs.ScanLeftToRemoteMode, RemoteName: remote}
pointers, err := lfs.ScanRefs(ref, "", scanOpt)
if err != nil {
Panic(err, "Error scanning for Git LFS files")
}
return uploadPointers(pointers)
}
func uploadPointers(pointers []*lfs.WrappedPointer) *lfs.TransferQueue {
totalSize := int64(0)
for _, p := range pointers {
@ -40,7 +57,7 @@ func uploadsBetweenRefs(left string, right string) *lfs.TransferQueue {
uploadQueue := lfs.NewUploadQueue(len(pointers), totalSize, pushDryRun)
for i, pointer := range pointers {
if pushDryRun {
Print("push %s", pointer.Name)
Print("push %s [%s]", pointer.Name, pointer.Oid)
continue
}
@ -101,7 +118,6 @@ func uploadsWithObjectIDs(oids []string) *lfs.TransferQueue {
// pushCommand calculates the git objects to send by looking comparing the range
// of commits between the local and remote git servers.
func pushCommand(cmd *cobra.Command, args []string) {
var left, right string
var uploadQueue *lfs.TransferQueue
if len(args) == 0 {
@ -127,7 +143,7 @@ func pushCommand(cmd *cobra.Command, args []string) {
return
}
left, right = decodeRefs(string(refsData))
left, right := decodeRefs(string(refsData))
if left == pushDeleteBranch {
return
}
@ -141,34 +157,27 @@ func pushCommand(cmd *cobra.Command, args []string) {
uploadQueue = uploadsWithObjectIDs(args[1:])
} else {
var remoteArg, refArg string
if len(args) < 1 {
Print("Usage: git lfs push --dry-run <remote> [ref]")
return
}
remoteArg = args[0]
remote := args[0]
var ref string
if len(args) == 2 {
refArg = args[1]
ref = args[1]
}
localRef, err := git.CurrentRef()
if err != nil {
Panic(err, "Error getting local ref")
}
left = localRef
remoteRef, err := git.LsRemote(remoteArg, refArg)
if err != nil {
Panic(err, "Error getting remote ref")
if ref == "" {
localRef, err := git.CurrentRef()
if err != nil {
Panic(err, "Error getting local ref")
}
ref = localRef
}
if remoteRef != "" {
right = "^" + strings.Split(remoteRef, "\t")[0]
}
uploadQueue = uploadsBetweenRefs(left, right)
uploadQueue = uploadsBetweenRefAndRemote(ref, remote)
}
if !pushDryRun {

@ -41,7 +41,9 @@ begin_test "push dry-run"
git add .gitattributes a.dat
git commit -m "add a.dat"
[ "push a.dat" = "$(git lfs push --dry-run origin master 2>&1)" ]
git lfs push --dry-run origin master 2>&1 | tee push.log
grep "push a.dat" push.log
[ $(wc -l < push.log) -eq 1 ]
git checkout -b push-b
echo "push b" > b.dat
@ -98,10 +100,13 @@ begin_test "push modified files"
content1="filecontent1"
content2="filecontent2"
content3="filecontent3"
content4="filecontent4"
content5="filecontent5"
oid1=$(printf "$content1" | shasum -a 256 | cut -f 1 -d " ")
oid2=$(printf "$content2" | shasum -a 256 | cut -f 1 -d " ")
oid3=$(printf "$content3" | shasum -a 256 | cut -f 1 -d " ")
oid4=$(printf "$content4" | shasum -a 256 | cut -f 1 -d " ")
oid5=$(printf "$content5" | shasum -a 256 | cut -f 1 -d " ")
echo "[
{
@ -116,17 +121,26 @@ begin_test "push modified files"
},
{
\"CommitDate\":\"$(get_date -1m)\",
\"NewBranch\":\"other_branch\",
\"Files\":[
{\"Filename\":\"file1.dat\",\"Size\":${#content5}, \"Data\":\"$content5\"}]
},
{
\"CommitDate\":\"$(get_date -1m)\",
\"ParentBranches\":[\"master\"],
\"Files\":[
{\"Filename\":\"file1.dat\",\"Size\":${#content3}, \"Data\":\"$content3\"},
{\"Filename\":\"file2.dat\",\"Size\":${#content4}, \"Data\":\"$content4\"}]
}
]" | lfstest-testutils addcommits
git push origin master
git lfs push origin master
git lfs push origin other_branch
assert_server_object "$reponame" "$oid1"
assert_server_object "$reponame" "$oid2"
assert_server_object "$reponame" "$oid3"
assert_server_object "$reponame" "$oid4"
assert_server_object "$reponame" "$oid5"
)
end_test