Skip to content

Commit

Permalink
git-p4: decode p4 wildcard characters
Browse files Browse the repository at this point in the history
There are four wildcard characters in p4.  Files with these
characters can be added to p4 repos using the "-f" option.
They are stored in %xx notation, and when checked out, p4
converts them back to normal.

This patch does the same thing when importing into git,
converting the four special characters.  Without this change,
the files appear with literal %xx in their names.

Be careful not to produce "*" in filenames on windows.  That
will fail.

Signed-off-by: Pete Wyckoff <pw@padd.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Pete Wyckoff authored and Junio C Hamano committed Feb 21, 2011
1 parent e32e00d commit 084f630
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
18 changes: 18 additions & 0 deletions contrib/fast-import/git-p4
Original file line number Diff line number Diff line change
Expand Up @@ -884,6 +884,23 @@ class P4Sync(Command):
if gitConfig("git-p4.syncFromOrigin") == "false":
self.syncWithOrigin = False

#
# P4 wildcards are not allowed in filenames. P4 complains
# if you simply add them, but you can force it with "-f", in
# which case it translates them into %xx encoding internally.
# Search for and fix just these four characters. Do % last so
# that fixing it does not inadvertently create new %-escapes.
#
def wildcard_decode(self, path):
# Cannot have * in a filename in windows; untested as to
# what p4 would do in such a case.
if not self.isWindows:
path = path.replace("%2A", "*")
path = path.replace("%23", "#") \
.replace("%40", "@") \
.replace("%25", "%")
return path

def extractFilesFromCommit(self, commit):
self.cloneExclude = [re.sub(r"\.\.\.$", "", path)
for path in self.cloneExclude]
Expand Down Expand Up @@ -962,6 +979,7 @@ class P4Sync(Command):
return

relPath = self.stripRepoPath(file['depotFile'], self.branchPrefixes)
relPath = self.wildcard_decode(relPath)
if verbose:
sys.stderr.write("%s\n" % relPath)

Expand Down
22 changes: 22 additions & 0 deletions t/t9800-git-p4.sh
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,28 @@ test_expect_success 'exit when p4 fails to produce marshaled output' '
test_must_fail grep -q Traceback errs
'

test_expect_success 'add p4 files with wildcards in the names' '
cd "$cli" &&
echo file-wild-hash >file-wild#hash &&
echo file-wild-star >file-wild\*star &&
echo file-wild-at >file-wild@at &&
echo file-wild-percent >file-wild%percent &&
p4 add -f file-wild* &&
p4 submit -d "file wildcards" &&
cd "$TRASH_DIRECTORY"
'

test_expect_success 'wildcard files git-p4 clone' '
"$GITP4" clone --dest="$git" //depot &&
cd "$git" &&
test -f file-wild#hash &&
test -f file-wild\*star &&
test -f file-wild@at &&
test -f file-wild%percent &&
cd "$TRASH_DIRECTORY" &&
rm -rf "$git" && mkdir "$git"
'

test_expect_success 'shutdown' '
pid=`pgrep -f p4d` &&
test -n "$pid" &&
Expand Down

0 comments on commit 084f630

Please sign in to comment.