зеркало из https://github.com/microsoft/git.git
Merge branch 'tl/p4'
* 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.
This commit is contained in:
Коммит
f9249ecfa9
|
@ -333,9 +333,13 @@ def gitBranchExists(branch):
|
||||||
return proc.wait() == 0;
|
return proc.wait() == 0;
|
||||||
|
|
||||||
_gitConfig = {}
|
_gitConfig = {}
|
||||||
def gitConfig(key):
|
def gitConfig(key, args = None): # set args to "--bool", for instance
|
||||||
if not _gitConfig.has_key(key):
|
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]
|
return _gitConfig[key]
|
||||||
|
|
||||||
def p4BranchesInGit(branchesAreInRemotes = True):
|
def p4BranchesInGit(branchesAreInRemotes = True):
|
||||||
|
@ -452,6 +456,19 @@ def p4ChangesForPaths(depotPaths, changeRange):
|
||||||
changelist.sort()
|
changelist.sort()
|
||||||
return changelist
|
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:
|
class Command:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.usage = "usage: %prog [options]"
|
self.usage = "usage: %prog [options]"
|
||||||
|
@ -599,7 +616,7 @@ class P4Submit(Command):
|
||||||
lastTab = path.rfind("\t")
|
lastTab = path.rfind("\t")
|
||||||
if lastTab != -1:
|
if lastTab != -1:
|
||||||
path = path[:lastTab]
|
path = path[:lastTab]
|
||||||
if not path.startswith(self.depotPath):
|
if not p4PathStartsWith(path, self.depotPath):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
inFilesSection = False
|
inFilesSection = False
|
||||||
|
@ -937,11 +954,11 @@ class P4Sync(Command):
|
||||||
path = commit["depotFile%s" % fnum]
|
path = commit["depotFile%s" % fnum]
|
||||||
|
|
||||||
if [p for p in self.cloneExclude
|
if [p for p in self.cloneExclude
|
||||||
if path.startswith (p)]:
|
if p4PathStartsWith(path, p)]:
|
||||||
found = False
|
found = False
|
||||||
else:
|
else:
|
||||||
found = [p for p in self.depotPaths
|
found = [p for p in self.depotPaths
|
||||||
if path.startswith (p)]
|
if p4PathStartsWith(path, p)]
|
||||||
if not found:
|
if not found:
|
||||||
fnum = fnum + 1
|
fnum = fnum + 1
|
||||||
continue
|
continue
|
||||||
|
@ -976,7 +993,7 @@ class P4Sync(Command):
|
||||||
prefixes = [re.sub("^(//[^/]+/).*", r'\1', prefixes[0])]
|
prefixes = [re.sub("^(//[^/]+/).*", r'\1', prefixes[0])]
|
||||||
|
|
||||||
for p in prefixes:
|
for p in prefixes:
|
||||||
if path.startswith(p):
|
if p4PathStartsWith(path, p):
|
||||||
path = path[len(p):]
|
path = path[len(p):]
|
||||||
|
|
||||||
return path
|
return path
|
||||||
|
@ -987,7 +1004,7 @@ class P4Sync(Command):
|
||||||
while commit.has_key("depotFile%s" % fnum):
|
while commit.has_key("depotFile%s" % fnum):
|
||||||
path = commit["depotFile%s" % fnum]
|
path = commit["depotFile%s" % fnum]
|
||||||
found = [p for p in self.depotPaths
|
found = [p for p in self.depotPaths
|
||||||
if path.startswith (p)]
|
if p4PathStartsWith(path, p)]
|
||||||
if not found:
|
if not found:
|
||||||
fnum = fnum + 1
|
fnum = fnum + 1
|
||||||
continue
|
continue
|
||||||
|
@ -1140,10 +1157,10 @@ class P4Sync(Command):
|
||||||
# create a commit.
|
# create a commit.
|
||||||
new_files = []
|
new_files = []
|
||||||
for f in 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)
|
new_files.append (f)
|
||||||
else:
|
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)
|
self.gitStream.write("commit %s\n" % branch)
|
||||||
# gitStream.write("mark :%s\n" % details["change"])
|
# gitStream.write("mark :%s\n" % details["change"])
|
||||||
|
@ -1304,7 +1321,7 @@ class P4Sync(Command):
|
||||||
source = paths[0]
|
source = paths[0]
|
||||||
destination = paths[1]
|
destination = paths[1]
|
||||||
## HACK
|
## 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]
|
source = source[len(self.depotPaths[0]):-4]
|
||||||
destination = destination[len(self.depotPaths[0]):-4]
|
destination = destination[len(self.depotPaths[0]):-4]
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче