Skip to content

Commit

Permalink
Merge branch 'tl/p4'
Browse files Browse the repository at this point in the history
* tl/p4:
  git-p4: Fix error message crash in P4Sync.commit.
  Teach git-p4 to ignore case in perforce filenames if configured.
  git-p4: Teach gitConfig method about arguments.
  • Loading branch information
Junio C Hamano committed Mar 23, 2011
2 parents b350f77 + afa1dd9 commit f9249ec
Showing 1 changed file with 27 additions and 10 deletions.
37 changes: 27 additions & 10 deletions contrib/fast-import/git-p4
Original file line number Diff line number Diff line change
Expand Up @@ -333,9 +333,13 @@ def gitBranchExists(branch):
return proc.wait() == 0;

_gitConfig = {}
def gitConfig(key):
def gitConfig(key, args = None): # set args to "--bool", for instance
if not _gitConfig.has_key(key):
_gitConfig[key] = read_pipe("git config %s" % key, ignore_error=True).strip()
argsFilter = ""
if args != None:
argsFilter = "%s " % args
cmd = "git config %s%s" % (argsFilter, key)
_gitConfig[key] = read_pipe(cmd, ignore_error=True).strip()
return _gitConfig[key]

def p4BranchesInGit(branchesAreInRemotes = True):
Expand Down Expand Up @@ -452,6 +456,19 @@ def p4ChangesForPaths(depotPaths, changeRange):
changelist.sort()
return changelist

def p4PathStartsWith(path, prefix):
# This method tries to remedy a potential mixed-case issue:
#
# If UserA adds //depot/DirA/file1
# and UserB adds //depot/dira/file2
#
# we may or may not have a problem. If you have core.ignorecase=true,
# we treat DirA and dira as the same directory
ignorecase = gitConfig("core.ignorecase", "--bool") == "true"
if ignorecase:
return path.lower().startswith(prefix.lower())
return path.startswith(prefix)

class Command:
def __init__(self):
self.usage = "usage: %prog [options]"
Expand Down Expand Up @@ -599,7 +616,7 @@ class P4Submit(Command):
lastTab = path.rfind("\t")
if lastTab != -1:
path = path[:lastTab]
if not path.startswith(self.depotPath):
if not p4PathStartsWith(path, self.depotPath):
continue
else:
inFilesSection = False
Expand Down Expand Up @@ -937,11 +954,11 @@ class P4Sync(Command):
path = commit["depotFile%s" % fnum]

if [p for p in self.cloneExclude
if path.startswith (p)]:
if p4PathStartsWith(path, p)]:
found = False
else:
found = [p for p in self.depotPaths
if path.startswith (p)]
if p4PathStartsWith(path, p)]
if not found:
fnum = fnum + 1
continue
Expand Down Expand Up @@ -976,7 +993,7 @@ class P4Sync(Command):
prefixes = [re.sub("^(//[^/]+/).*", r'\1', prefixes[0])]

for p in prefixes:
if path.startswith(p):
if p4PathStartsWith(path, p):
path = path[len(p):]

return path
Expand All @@ -987,7 +1004,7 @@ class P4Sync(Command):
while commit.has_key("depotFile%s" % fnum):
path = commit["depotFile%s" % fnum]
found = [p for p in self.depotPaths
if path.startswith (p)]
if p4PathStartsWith(path, p)]
if not found:
fnum = fnum + 1
continue
Expand Down Expand Up @@ -1140,10 +1157,10 @@ class P4Sync(Command):
# create a commit.
new_files = []
for f in files:
if [p for p in branchPrefixes if f['path'].startswith(p)]:
if [p for p in branchPrefixes if p4PathStartsWith(f['path'], p)]:
new_files.append (f)
else:
sys.stderr.write("Ignoring file outside of prefix: %s\n" % path)
sys.stderr.write("Ignoring file outside of prefix: %s\n" % f['path'])

self.gitStream.write("commit %s\n" % branch)
# gitStream.write("mark :%s\n" % details["change"])
Expand Down Expand Up @@ -1304,7 +1321,7 @@ class P4Sync(Command):
source = paths[0]
destination = paths[1]
## HACK
if source.startswith(self.depotPaths[0]) and destination.startswith(self.depotPaths[0]):
if p4PathStartsWith(source, self.depotPaths[0]) and p4PathStartsWith(destination, self.depotPaths[0]):
source = source[len(self.depotPaths[0]):-4]
destination = destination[len(self.depotPaths[0]):-4]

Expand Down

0 comments on commit f9249ec

Please sign in to comment.