mirror of
https://gerrit.googlesource.com/git-repo
synced 2024-12-21 07:16:21 +00:00
diffmanifests: honor user-supplied manifest paths
The current implementation ignores the user-specified paths to manifests. if the "repo diffmanifests" is invoked with absolute file paths for one or both manifests, the command fails with message: fatal: duplicate path ... in /tmp/manifest-old.xml Also the current implementation fails to expand the absolute path to manifest files if "repo diffmanifests" is invoked with relative paths, i.e "repo diffmanifests manifest-old.xml manifest-new.xml". fatal: manifest manifest-old.xml not found This commit fixes the first issue by disabling the local manifest discovery for diffmanifests command, and the second issue by expanding paths to manifests within "diffmanifests" sub-command. Test: repo manifest --revision-as-HEAD -o /tmp/manifest-old.xml repo sync repo manifest --revision-as-HEAD -o /tmp/manifest-new.xml repo diffmanifests /tmp/manifest-old.xml /tmp/manifest-new.xml Change-Id: Ia125d769bfbea75adb9aba81abbd8c636f2168d4 Signed-off-by: Vasyl Gello <vasek.gello@gmail.com>
This commit is contained in:
parent
025704e946
commit
c745350ab9
@ -135,6 +135,7 @@ class XmlManifest(object):
|
|||||||
self.globalConfig = GitConfig.ForUser()
|
self.globalConfig = GitConfig.ForUser()
|
||||||
self.localManifestWarning = False
|
self.localManifestWarning = False
|
||||||
self.isGitcClient = False
|
self.isGitcClient = False
|
||||||
|
self._load_local_manifests = True
|
||||||
|
|
||||||
self.repoProject = MetaProject(self, 'repo',
|
self.repoProject = MetaProject(self, 'repo',
|
||||||
gitdir = os.path.join(repodir, 'repo/.git'),
|
gitdir = os.path.join(repodir, 'repo/.git'),
|
||||||
@ -146,15 +147,26 @@ class XmlManifest(object):
|
|||||||
|
|
||||||
self._Unload()
|
self._Unload()
|
||||||
|
|
||||||
def Override(self, name):
|
def Override(self, name, load_local_manifests=True):
|
||||||
"""Use a different manifest, just for the current instantiation.
|
"""Use a different manifest, just for the current instantiation.
|
||||||
"""
|
"""
|
||||||
|
path = None
|
||||||
|
|
||||||
|
# Look for a manifest by path in the filesystem (including the cwd).
|
||||||
|
if not load_local_manifests:
|
||||||
|
local_path = os.path.abspath(name)
|
||||||
|
if os.path.isfile(local_path):
|
||||||
|
path = local_path
|
||||||
|
|
||||||
|
# Look for manifests by name from the manifests repo.
|
||||||
|
if path is None:
|
||||||
path = os.path.join(self.manifestProject.worktree, name)
|
path = os.path.join(self.manifestProject.worktree, name)
|
||||||
if not os.path.isfile(path):
|
if not os.path.isfile(path):
|
||||||
raise ManifestParseError('manifest %s not found' % name)
|
raise ManifestParseError('manifest %s not found' % name)
|
||||||
|
|
||||||
old = self.manifestFile
|
old = self.manifestFile
|
||||||
try:
|
try:
|
||||||
|
self._load_local_manifests = load_local_manifests
|
||||||
self.manifestFile = path
|
self.manifestFile = path
|
||||||
self._Unload()
|
self._Unload()
|
||||||
self._Load()
|
self._Load()
|
||||||
@ -435,16 +447,19 @@ class XmlManifest(object):
|
|||||||
nodes.append(self._ParseManifestXml(self.manifestFile,
|
nodes.append(self._ParseManifestXml(self.manifestFile,
|
||||||
self.manifestProject.worktree))
|
self.manifestProject.worktree))
|
||||||
|
|
||||||
|
if self._load_local_manifests:
|
||||||
local = os.path.join(self.repodir, LOCAL_MANIFEST_NAME)
|
local = os.path.join(self.repodir, LOCAL_MANIFEST_NAME)
|
||||||
if os.path.exists(local):
|
if os.path.exists(local):
|
||||||
if not self.localManifestWarning:
|
if not self.localManifestWarning:
|
||||||
self.localManifestWarning = True
|
self.localManifestWarning = True
|
||||||
print('warning: %s is deprecated; put local manifests in `%s` instead'
|
print('warning: %s is deprecated; put local manifests '
|
||||||
% (LOCAL_MANIFEST_NAME, os.path.join(self.repodir, LOCAL_MANIFESTS_DIR_NAME)),
|
'in `%s` instead' % (LOCAL_MANIFEST_NAME,
|
||||||
|
os.path.join(self.repodir, LOCAL_MANIFESTS_DIR_NAME)),
|
||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
nodes.append(self._ParseManifestXml(local, self.repodir))
|
nodes.append(self._ParseManifestXml(local, self.repodir))
|
||||||
|
|
||||||
local_dir = os.path.abspath(os.path.join(self.repodir, LOCAL_MANIFESTS_DIR_NAME))
|
local_dir = os.path.abspath(os.path.join(self.repodir,
|
||||||
|
LOCAL_MANIFESTS_DIR_NAME))
|
||||||
try:
|
try:
|
||||||
for local_file in sorted(platform_utils.listdir(local_dir)):
|
for local_file in sorted(platform_utils.listdir(local_dir)):
|
||||||
if local_file.endswith('.xml'):
|
if local_file.endswith('.xml'):
|
||||||
|
@ -190,12 +190,12 @@ synced and their revisions won't be found.
|
|||||||
self.printProject = self.printAdded = self.printRemoved = self.printRevision = self.printText
|
self.printProject = self.printAdded = self.printRemoved = self.printRevision = self.printText
|
||||||
|
|
||||||
manifest1 = XmlManifest(self.manifest.repodir)
|
manifest1 = XmlManifest(self.manifest.repodir)
|
||||||
manifest1.Override(args[0])
|
manifest1.Override(args[0], load_local_manifests=False)
|
||||||
if len(args) == 1:
|
if len(args) == 1:
|
||||||
manifest2 = self.manifest
|
manifest2 = self.manifest
|
||||||
else:
|
else:
|
||||||
manifest2 = XmlManifest(self.manifest.repodir)
|
manifest2 = XmlManifest(self.manifest.repodir)
|
||||||
manifest2.Override(args[1])
|
manifest2.Override(args[1], load_local_manifests=False)
|
||||||
|
|
||||||
diff = manifest1.projectsDiff(manifest2)
|
diff = manifest1.projectsDiff(manifest2)
|
||||||
if opt.raw:
|
if opt.raw:
|
||||||
|
Loading…
Reference in New Issue
Block a user