diff options
author | Shashank Devaraj <shashankkarthik@gmail.com> | 2022-09-05 12:05:47 +0530 |
---|---|---|
committer | Mike Frysinger <vapier@google.com> | 2022-09-15 17:42:08 +0000 |
commit | 4ba29c42ca7edac9ea32b16614557e72bfbcb9c8 (patch) | |
tree | 8805506a37e08e6a64d9b08caa99f4659ba700ba | |
parent | 45ef9011c29b342f0c61e3ebe430ffff09e65501 (diff) | |
download | git-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.py | 5 | ||||
-rw-r--r-- | subcmds/diffmanifests.py | 10 |
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') |