Merge pull request #608 from sinbad/push-other-branch
Fix pushing other branches
This commit is contained in:
commit
965ddbb10d
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user