Teach git-p4 to ignore case in perforce filenames if configured.
When files are added to perforce, the path to that file has whichever case configuration that exists on the machine of the user who added the file. What does that mean? It means that when Alice adds a file //depot/DirA/FileA.txt ... and Bob adds: //depot/dirA/FileB.txt ... we may or may not get a problem. If a user sets the config variable git-p4.ignorecase to "true", we will consider //depot/DirA and //depot/dirA to be the same directory. Signed-off-by: Tor Arvid Lund <torarvid@gmail.com> Acked-by: Pete Wyckoff <pw@padd.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
99f790f22e
commit
d53de8b97d
@ -456,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]"
|
||||
@ -603,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
|
||||
@ -941,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
|
||||
@ -980,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
|
||||
@ -991,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
|
||||
@ -1144,7 +1157,7 @@ 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)
|
||||
@ -1308,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]
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user