Skip to content

Commit

Permalink
git-p4: handle p4 branches and labels containing shell chars
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Luke Diamand authored and Junio C Hamano committed Jan 20, 2012
1 parent 8cbfc11 commit 52a4880
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 4 deletions.
8 changes: 4 additions & 4 deletions contrib/fast-import/git-p4
Original file line number Diff line number Diff line change
Expand Up @@ -799,7 +799,7 @@ class P4Submit(Command, P4UserMap):
def canChangeChangelists(self):
# check to see if we have p4 admin or super-user permissions, either of
# which are required to modify changelists.
results = p4CmdList("protects %s" % self.depotPath)
results = p4CmdList(["protects", self.depotPath])
for r in results:
if r.has_key('perm'):
if r['perm'] == 'admin':
Expand Down Expand Up @@ -1758,7 +1758,7 @@ class P4Sync(Command, P4UserMap):
def getLabels(self):
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:
print "Finding files belonging to labels in %s" % `self.depotPaths`

Expand Down Expand Up @@ -1800,7 +1800,7 @@ class P4Sync(Command, P4UserMap):
command = "branches"

for info in p4CmdList(command):
details = p4Cmd("branch -o %s" % info["branch"])
details = p4Cmd(["branch", "-o", info["branch"]])
viewIdx = 0
while details.has_key("View%s" % viewIdx):
paths = details["View%s" % viewIdx].split(" ")
Expand Down Expand Up @@ -1938,7 +1938,7 @@ class P4Sync(Command, P4UserMap):
sourceRef = self.gitRefForBranch(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
gitParent = self.gitCommitByP4Change(sourceRef, branchParentChange)
if len(gitParent) > 0:
Expand Down
48 changes: 48 additions & 0 deletions t/t9803-git-p4-shell-metachars.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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' '
kill_p4d
'
Expand Down

0 comments on commit 52a4880

Please sign in to comment.