git-p4: honor core.ignorecase when using P4 client specs
Perforce depot may record paths in mixed cases, e.g. "p4 files" may show that there are these two paths: //depot/Path/to/file1 //depot/pATH/to/file2 and with "p4" or "p4v", these end up in the same directory, e.g. //depot/Path/to/file1 //depot/Path/to/file2 which is the desired outcome on case insensitive systems. If git-p4 is used with client spec "//depot/Path/...", however, then all files not matching the case in the client spec are ignored (in the example above "//depot/pATH/to/file2"). Fix this by using the path case that appears first in lexicographical order when core.ignorecase is set to true. This behavior is consistent with "p4" and "p4v". Signed-off-by: Lars Schneider <larsxschneider@gmail.com> Acked-by: Luke Diamand <luke@diamand.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
3a9835bf65
commit
a0a50d873c
@ -1950,10 +1950,14 @@ class View(object):
|
||||
if "unmap" in res:
|
||||
# it will list all of them, but only one not unmap-ped
|
||||
continue
|
||||
if gitConfigBool("core.ignorecase"):
|
||||
res['depotFile'] = res['depotFile'].lower()
|
||||
self.client_spec_path_cache[res['depotFile']] = self.convert_client_path(res["clientFile"])
|
||||
|
||||
# not found files or unmap files set to ""
|
||||
for depotFile in fileArgs:
|
||||
if gitConfigBool("core.ignorecase"):
|
||||
depotFile = depotFile.lower()
|
||||
if depotFile not in self.client_spec_path_cache:
|
||||
self.client_spec_path_cache[depotFile] = ""
|
||||
|
||||
@ -1962,6 +1966,9 @@ class View(object):
|
||||
depot file should live. Returns "" if the file should
|
||||
not be mapped in the client."""
|
||||
|
||||
if gitConfigBool("core.ignorecase"):
|
||||
depot_path = depot_path.lower()
|
||||
|
||||
if depot_path in self.client_spec_path_cache:
|
||||
return self.client_spec_path_cache[depot_path]
|
||||
|
||||
|
Reference in New Issue
Block a user