git-p4: handle p4 branches and labels containing shell chars
Don't use shell expansion when detecting branches, as it will fail if the branch name contains a shell metachar. Similarly for labels. Add additional test for branches with shell metachars. Signed-off-by: Luke Diamand <luke@diamand.org> Acked-by: Pete Wyckoff <pw@padd.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8cbfc1189c
commit
52a4880bcd
@ -799,7 +799,7 @@ class P4Submit(Command, P4UserMap):
|
|||||||
def canChangeChangelists(self):
|
def canChangeChangelists(self):
|
||||||
# check to see if we have p4 admin or super-user permissions, either of
|
# check to see if we have p4 admin or super-user permissions, either of
|
||||||
# which are required to modify changelists.
|
# which are required to modify changelists.
|
||||||
results = p4CmdList("protects %s" % self.depotPath)
|
results = p4CmdList(["protects", self.depotPath])
|
||||||
for r in results:
|
for r in results:
|
||||||
if r.has_key('perm'):
|
if r.has_key('perm'):
|
||||||
if r['perm'] == 'admin':
|
if r['perm'] == 'admin':
|
||||||
@ -1758,7 +1758,7 @@ class P4Sync(Command, P4UserMap):
|
|||||||
def getLabels(self):
|
def getLabels(self):
|
||||||
self.labels = {}
|
self.labels = {}
|
||||||
|
|
||||||
l = p4CmdList("labels %s..." % ' '.join (self.depotPaths))
|
l = p4CmdList(["labels"] + ["%s..." % p for p in self.depotPaths])
|
||||||
if len(l) > 0 and not self.silent:
|
if len(l) > 0 and not self.silent:
|
||||||
print "Finding files belonging to labels in %s" % `self.depotPaths`
|
print "Finding files belonging to labels in %s" % `self.depotPaths`
|
||||||
|
|
||||||
@ -1800,7 +1800,7 @@ class P4Sync(Command, P4UserMap):
|
|||||||
command = "branches"
|
command = "branches"
|
||||||
|
|
||||||
for info in p4CmdList(command):
|
for info in p4CmdList(command):
|
||||||
details = p4Cmd("branch -o %s" % info["branch"])
|
details = p4Cmd(["branch", "-o", info["branch"]])
|
||||||
viewIdx = 0
|
viewIdx = 0
|
||||||
while details.has_key("View%s" % viewIdx):
|
while details.has_key("View%s" % viewIdx):
|
||||||
paths = details["View%s" % viewIdx].split(" ")
|
paths = details["View%s" % viewIdx].split(" ")
|
||||||
@ -1938,7 +1938,7 @@ class P4Sync(Command, P4UserMap):
|
|||||||
sourceRef = self.gitRefForBranch(sourceBranch)
|
sourceRef = self.gitRefForBranch(sourceBranch)
|
||||||
#print "source " + sourceBranch
|
#print "source " + sourceBranch
|
||||||
|
|
||||||
branchParentChange = int(p4Cmd("changes -m 1 %s...@1,%s" % (sourceDepotPath, firstChange))["change"])
|
branchParentChange = int(p4Cmd(["changes", "-m", "1", "%s...@1,%s" % (sourceDepotPath, firstChange)])["change"])
|
||||||
#print "branch parent: %s" % branchParentChange
|
#print "branch parent: %s" % branchParentChange
|
||||||
gitParent = self.gitCommitByP4Change(sourceRef, branchParentChange)
|
gitParent = self.gitCommitByP4Change(sourceRef, branchParentChange)
|
||||||
if len(gitParent) > 0:
|
if len(gitParent) > 0:
|
||||||
|
@ -57,6 +57,54 @@ test_expect_success 'deleting with shell metachars' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# Create a branch with a shell metachar in its name
|
||||||
|
#
|
||||||
|
# 1. //depot/main
|
||||||
|
# 2. //depot/branch$3
|
||||||
|
|
||||||
|
test_expect_success 'branch with shell char' '
|
||||||
|
test_when_finished cleanup_git &&
|
||||||
|
test_create_repo "$git" &&
|
||||||
|
(
|
||||||
|
cd "$cli" &&
|
||||||
|
|
||||||
|
mkdir -p main &&
|
||||||
|
|
||||||
|
echo f1 >main/f1 &&
|
||||||
|
p4 add main/f1 &&
|
||||||
|
p4 submit -d "main/f1" &&
|
||||||
|
|
||||||
|
p4 integrate //depot/main/... //depot/branch\$3/... &&
|
||||||
|
p4 submit -d "integrate main to branch\$3" &&
|
||||||
|
|
||||||
|
echo f1 >branch\$3/shell_char_branch_file &&
|
||||||
|
p4 add branch\$3/shell_char_branch_file &&
|
||||||
|
p4 submit -d "branch\$3/shell_char_branch_file" &&
|
||||||
|
|
||||||
|
p4 branch -i <<-EOF &&
|
||||||
|
Branch: branch\$3
|
||||||
|
View: //depot/main/... //depot/branch\$3/...
|
||||||
|
EOF
|
||||||
|
|
||||||
|
p4 edit main/f1 &&
|
||||||
|
echo "a change" >> main/f1 &&
|
||||||
|
p4 submit -d "a change" main/f1 &&
|
||||||
|
|
||||||
|
p4 integrate -b branch\$3 &&
|
||||||
|
p4 resolve -am branch\$3/... &&
|
||||||
|
p4 submit -d "integrate main to branch\$3" &&
|
||||||
|
|
||||||
|
cd "$git" &&
|
||||||
|
|
||||||
|
git config git-p4.branchList main:branch\$3 &&
|
||||||
|
"$GITP4" clone --dest=. --detect-branches //depot@all &&
|
||||||
|
git log --all --graph --decorate --stat &&
|
||||||
|
git reset --hard p4/depot/branch\$3 &&
|
||||||
|
test -f shell_char_branch_file &&
|
||||||
|
test -f f1
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'kill p4d' '
|
test_expect_success 'kill p4d' '
|
||||||
kill_p4d
|
kill_p4d
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user