git-p4: support exclude paths
Teach git-p4 about the -/ option which adds depot paths to the exclude list, used when cloning. The option is chosen such that the natural Perforce syntax works, eg: git p4 clone //branch/path/... -//branch/path/{large,old}/... Trailing ... on exclude paths are optional. This is a generalization of a change by Dmitry Kakurin (thanks). Signed-off-by: Tommy Thorn <tommy-git@thorn.ws> Signed-off-by: Simon Hausmann <simon@lst.de>
This commit is contained in:
parent
2db511fdbd
commit
354081d5a0
@ -843,16 +843,23 @@ class P4Sync(Command):
|
|||||||
self.keepRepoPath = False
|
self.keepRepoPath = False
|
||||||
self.depotPaths = None
|
self.depotPaths = None
|
||||||
self.p4BranchesInGit = []
|
self.p4BranchesInGit = []
|
||||||
|
self.cloneExclude = []
|
||||||
|
|
||||||
if gitConfig("git-p4.syncFromOrigin") == "false":
|
if gitConfig("git-p4.syncFromOrigin") == "false":
|
||||||
self.syncWithOrigin = False
|
self.syncWithOrigin = False
|
||||||
|
|
||||||
def extractFilesFromCommit(self, commit):
|
def extractFilesFromCommit(self, commit):
|
||||||
|
self.cloneExclude = [re.sub(r"\.\.\.$", "", path)
|
||||||
|
for path in self.cloneExclude]
|
||||||
files = []
|
files = []
|
||||||
fnum = 0
|
fnum = 0
|
||||||
while commit.has_key("depotFile%s" % fnum):
|
while commit.has_key("depotFile%s" % fnum):
|
||||||
path = commit["depotFile%s" % fnum]
|
path = commit["depotFile%s" % fnum]
|
||||||
|
|
||||||
|
if [p for p in self.cloneExclude
|
||||||
|
if path.startswith (p)]:
|
||||||
|
found = False
|
||||||
|
else:
|
||||||
found = [p for p in self.depotPaths
|
found = [p for p in self.depotPaths
|
||||||
if path.startswith (p)]
|
if path.startswith (p)]
|
||||||
if not found:
|
if not found:
|
||||||
@ -1634,13 +1641,23 @@ class P4Clone(P4Sync):
|
|||||||
P4Sync.__init__(self)
|
P4Sync.__init__(self)
|
||||||
self.description = "Creates a new git repository and imports from Perforce into it"
|
self.description = "Creates a new git repository and imports from Perforce into it"
|
||||||
self.usage = "usage: %prog [options] //depot/path[@revRange]"
|
self.usage = "usage: %prog [options] //depot/path[@revRange]"
|
||||||
self.options.append(
|
self.options += [
|
||||||
optparse.make_option("--destination", dest="cloneDestination",
|
optparse.make_option("--destination", dest="cloneDestination",
|
||||||
action='store', default=None,
|
action='store', default=None,
|
||||||
help="where to leave result of the clone"))
|
help="where to leave result of the clone"),
|
||||||
|
optparse.make_option("-/", dest="cloneExclude",
|
||||||
|
action="append", type="string",
|
||||||
|
help="exclude depot path")
|
||||||
|
]
|
||||||
self.cloneDestination = None
|
self.cloneDestination = None
|
||||||
self.needsGit = False
|
self.needsGit = False
|
||||||
|
|
||||||
|
# This is required for the "append" cloneExclude action
|
||||||
|
def ensure_value(self, attr, value):
|
||||||
|
if not hasattr(self, attr) or getattr(self, attr) is None:
|
||||||
|
setattr(self, attr, value)
|
||||||
|
return getattr(self, attr)
|
||||||
|
|
||||||
def defaultDestination(self, args):
|
def defaultDestination(self, args):
|
||||||
## TODO: use common prefix of args?
|
## TODO: use common prefix of args?
|
||||||
depotPath = args[0]
|
depotPath = args[0]
|
||||||
@ -1664,6 +1681,7 @@ class P4Clone(P4Sync):
|
|||||||
self.cloneDestination = depotPaths[-1]
|
self.cloneDestination = depotPaths[-1]
|
||||||
depotPaths = depotPaths[:-1]
|
depotPaths = depotPaths[:-1]
|
||||||
|
|
||||||
|
self.cloneExclude = ["/"+p for p in self.cloneExclude]
|
||||||
for p in depotPaths:
|
for p in depotPaths:
|
||||||
if not p.startswith("//"):
|
if not p.startswith("//"):
|
||||||
return False
|
return False
|
||||||
|
Loading…
Reference in New Issue
Block a user