summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorShashank Devaraj <shashankkarthik@gmail.com>2022-09-05 12:05:47 +0530
committerMike Frysinger <vapier@google.com>2022-09-15 17:42:08 +0000
commit4ba29c42ca7edac9ea32b16614557e72bfbcb9c8 (patch)
tree8805506a37e08e6a64d9b08caa99f4659ba700ba
parent45ef9011c29b342f0c61e3ebe430ffff09e65501 (diff)
downloadgit-repo-4ba29c42ca7edac9ea32b16614557e72bfbcb9c8.tar.gz
diffmanifests: Handle Missing Projects in Repo Workspace
By default there are 4 categories in the diffmanifests api puts the diffs in to - added, removed, changed and unreachable Example of command - repo diffmanifests 1.xml 2.xml added - list down the projects present in second manifest but not in first removed - list down the projects present in first but not in second changed - list down the changes and the differences for each project unreachable - when it encounters revision value in a project is incorrect But, when there are projects present in both manifests and could not find in local workspace where we have cloned the repo(because of different/subset manifest xml) - this will create unhandled exception Now we have added a 5th category called 'missing' - where in such cases it will handle the scenario and print the log for user Example: added projects : project_2 at revision e6c8a59832c05dc4b6a68cee6bc0feb832181725 removed projects : project_1 at revision e6c8a59832c05dc4b6a68cee6bc0feb832181725 changed projects : project_3 changed from 3bb890e1286f04e84d505e5db48e0ada89892331 to e434b3736f11537c67590fefadfe4495895e9785 missing projects : project_4 Change-Id: I244e8389bff7e95664c29d3dcb61e22308e3a573 Signed-off-by: Shashank Devaraj <shashankkarthik@gmail.com> Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/344774 Reviewed-by: Mike Frysinger <vapier@google.com>
-rw-r--r--manifest_xml.py5
-rw-r--r--subcmds/diffmanifests.py10
2 files changed, 14 insertions, 1 deletions
diff --git a/manifest_xml.py b/manifest_xml.py
index ea274c76..b7579d5d 100644
--- a/manifest_xml.py
+++ b/manifest_xml.py
@@ -1940,11 +1940,14 @@ https://gerrit.googlesource.com/git-repo/+/HEAD/docs/manifest-format.md
1940 fromKeys = sorted(fromProjects.keys()) 1940 fromKeys = sorted(fromProjects.keys())
1941 toKeys = sorted(toProjects.keys()) 1941 toKeys = sorted(toProjects.keys())
1942 1942
1943 diff = {'added': [], 'removed': [], 'changed': [], 'unreachable': []} 1943 diff = {'added': [], 'removed': [], 'missing': [], 'changed': [], 'unreachable': []}
1944 1944
1945 for proj in fromKeys: 1945 for proj in fromKeys:
1946 if proj not in toKeys: 1946 if proj not in toKeys:
1947 diff['removed'].append(fromProjects[proj]) 1947 diff['removed'].append(fromProjects[proj])
1948 elif not fromProjects[proj].Exists:
1949 diff['missing'].append(toProjects[proj])
1950 toKeys.remove(proj)
1948 else: 1951 else:
1949 fromProj = fromProjects[proj] 1952 fromProj = fromProjects[proj]
1950 toProj = toProjects[proj] 1953 toProj = toProjects[proj]
diff --git a/subcmds/diffmanifests.py b/subcmds/diffmanifests.py
index 0e5f4108..08196ef9 100644
--- a/subcmds/diffmanifests.py
+++ b/subcmds/diffmanifests.py
@@ -118,6 +118,16 @@ synced and their revisions won't be found.
118 self.printRevision(project.revisionExpr) 118 self.printRevision(project.revisionExpr)
119 self.out.nl() 119 self.out.nl()
120 120
121 if diff['missing']:
122 self.out.nl()
123 self.printText('missing projects : \n')
124 self.out.nl()
125 for project in diff['missing']:
126 self.printProject('\t%s' % (project.relpath))
127 self.printText(' at revision ')
128 self.printRevision(project.revisionExpr)
129 self.out.nl()
130
121 if diff['changed']: 131 if diff['changed']:
122 self.out.nl() 132 self.out.nl()
123 self.printText('changed projects : \n') 133 self.printText('changed projects : \n')