[FIX] add git_diff_repo_manifest to show diff code between 2 manifests
This commit is contained in:
parent
0c94c2d507
commit
d5bd432d59
4 changed files with 127 additions and 4 deletions
|
|
@ -84,6 +84,12 @@ Tools to synchronise the repo with another project. This will show differences a
|
||||||
./script/git_change_remote.py --sync_to /path/to/project/erplibre
|
./script/git_change_remote.py --sync_to /path/to/project/erplibre
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Diff code between manifest
|
||||||
|
To show diff between commits in different manifest
|
||||||
|
```bash
|
||||||
|
./script/git_diff_repo_manifest.py --input1 ./manifest/MANIFEST1.xml --input2 ./manifest/MANIFEST2.xml
|
||||||
|
```
|
||||||
|
|
||||||
## Add repo
|
## Add repo
|
||||||
Access to a new repo, add your URL to file [source_repo_addons.csv](../source_repo_addons.csv)
|
Access to a new repo, add your URL to file [source_repo_addons.csv](../source_repo_addons.csv)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -15,12 +15,18 @@ When ready to make a release, create a branch release/#.#.# and create a pull re
|
||||||
Update file CHANGELOG.md and create a section with new version.
|
Update file CHANGELOG.md and create a section with new version.
|
||||||
Merge it when maintener accept it.
|
Merge it when maintener accept it.
|
||||||
|
|
||||||
Add a tag on the commit on branch master with your release.
|
Add a tag on the commit on branch master with your release. When adding tag, be sure to update default.xml
|
||||||
```bash
|
```bash
|
||||||
git tag v#.#.#
|
git tag v#.#.#
|
||||||
# Push your tags
|
# Push your tags
|
||||||
git push --tags
|
git push --tags
|
||||||
|
# Add tags for all repo
|
||||||
|
./venv/repo forall -pc "git tag ERPLibre/v#.#.#"
|
||||||
|
./venv/repo forall -pc "git push ERPLibre --tags"
|
||||||
|
# Get all difference between a tag and HEAD, to update the CHANGELOG.md
|
||||||
|
./venv/repo forall -pc "git diff ERPLibre/v#.#.#..HEAD"
|
||||||
```
|
```
|
||||||
|
|
||||||
# TIPS
|
# TIPS
|
||||||
## Compare diff repo with another ERPLibre project
|
## Compare diff repo with another ERPLibre project
|
||||||
To generate a list of differences between repo git commit, do
|
To generate a list of differences between repo git commit, do
|
||||||
|
|
|
||||||
95
script/git_diff_repo_manifest.py
Executable file
95
script/git_diff_repo_manifest.py
Executable file
|
|
@ -0,0 +1,95 @@
|
||||||
|
#!./venv/bin/python
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
import logging
|
||||||
|
from git import Repo
|
||||||
|
|
||||||
|
new_path = os.path.normpath(os.path.join(os.path.dirname(__file__), '..'))
|
||||||
|
sys.path.append(new_path)
|
||||||
|
|
||||||
|
from script.git_tool import GitTool
|
||||||
|
|
||||||
|
_logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def get_config():
|
||||||
|
"""Parse command line arguments, extracting the config file name,
|
||||||
|
returning the union of config file and command line arguments
|
||||||
|
|
||||||
|
:return: dict of config file settings and command line arguments
|
||||||
|
"""
|
||||||
|
# TODO update description
|
||||||
|
parser = argparse.ArgumentParser(
|
||||||
|
formatter_class=argparse.RawDescriptionHelpFormatter,
|
||||||
|
description="""Get git diff between manifest repo revision,
|
||||||
|
diff revision input1 to input2 """,
|
||||||
|
epilog='''\
|
||||||
|
'''
|
||||||
|
)
|
||||||
|
parser.add_argument('--input1', required=True,
|
||||||
|
help="Compare input1 to input2. Input1 is older config.")
|
||||||
|
parser.add_argument('--input2', required=True,
|
||||||
|
help="Compare input1 to input2. Input2 is newer config.")
|
||||||
|
# parser.add_argument('--clear', action="store_true",
|
||||||
|
# help="Create a new manifest and clear old configuration.")
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
config = get_config()
|
||||||
|
git_tool = GitTool()
|
||||||
|
|
||||||
|
dct_remote_1, dct_project_1, default_remote_1 = git_tool.get_manifest_xml_info(
|
||||||
|
filename=config.input1, add_root=True)
|
||||||
|
dct_remote_2, dct_project_2, default_remote_2 = git_tool.get_manifest_xml_info(
|
||||||
|
filename=config.input2, add_root=True)
|
||||||
|
|
||||||
|
set_project_1 = set(dct_project_1.keys())
|
||||||
|
set_project_2 = set(dct_project_2.keys())
|
||||||
|
lst_same_name_normalize = set_project_1.intersection(set_project_2)
|
||||||
|
lst_missing_name_normalize = set_project_2.difference(set_project_1)
|
||||||
|
lst_over_name_normalize = set_project_1.difference(set_project_2)
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
total = len(lst_same_name_normalize)
|
||||||
|
for key in lst_missing_name_normalize:
|
||||||
|
i += 1
|
||||||
|
print(f"{i}/{total} - {key} from input1 not in input2.")
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
total = len(lst_over_name_normalize)
|
||||||
|
for key in lst_over_name_normalize:
|
||||||
|
i += 1
|
||||||
|
print(f"{i}/{total} - {key} from input2 not in input1.")
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
total = len(lst_same_name_normalize)
|
||||||
|
for key in lst_same_name_normalize:
|
||||||
|
value1 = dct_project_1.get(key)
|
||||||
|
value2 = dct_project_2.get(key)
|
||||||
|
old_revision = value1.get("@revision", git_tool.default_branch)
|
||||||
|
new_revision = value2.get("@revision", git_tool.default_branch)
|
||||||
|
|
||||||
|
path1 = value1.get("@path")
|
||||||
|
path2 = value2.get("@path")
|
||||||
|
if path1 != path2:
|
||||||
|
print(f"WARNING id {i}, path of git are different. "
|
||||||
|
f"Input1 {path1}, input2 {path2}")
|
||||||
|
continue
|
||||||
|
|
||||||
|
i += 1
|
||||||
|
result = "same" if old_revision == new_revision else "diff"
|
||||||
|
print(f"{i}/{total} - {result} - "
|
||||||
|
f"{path1} {key} old {old_revision} new {new_revision}")
|
||||||
|
default_arg = [f"{old_revision}..{new_revision}"]
|
||||||
|
if old_revision != new_revision:
|
||||||
|
# get git diff
|
||||||
|
repo = Repo(path1)
|
||||||
|
status = repo.git.diff(*default_arg)
|
||||||
|
print(status)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main()
|
||||||
|
|
@ -18,6 +18,7 @@ CST_EL_GITHUB_TOKEN = "EL_GITHUB_TOKEN"
|
||||||
DEFAULT_PROJECT_NAME = "ERPLibre"
|
DEFAULT_PROJECT_NAME = "ERPLibre"
|
||||||
DEFAULT_WEBSITE = "erplibre.ca"
|
DEFAULT_WEBSITE = "erplibre.ca"
|
||||||
DEFAULT_REMOTE_URL = "https://github.com/ERPLibre/ERPLibre.git"
|
DEFAULT_REMOTE_URL = "https://github.com/ERPLibre/ERPLibre.git"
|
||||||
|
DEFAULT_BRANCH = "12.0"
|
||||||
|
|
||||||
|
|
||||||
class Struct(object):
|
class Struct(object):
|
||||||
|
|
@ -26,6 +27,22 @@ class Struct(object):
|
||||||
|
|
||||||
|
|
||||||
class GitTool:
|
class GitTool:
|
||||||
|
@property
|
||||||
|
def default_project_name(self):
|
||||||
|
return DEFAULT_PROJECT_NAME
|
||||||
|
|
||||||
|
@property
|
||||||
|
def default_website(self):
|
||||||
|
return DEFAULT_WEBSITE
|
||||||
|
|
||||||
|
@property
|
||||||
|
def default_remote_url(self):
|
||||||
|
return DEFAULT_REMOTE_URL
|
||||||
|
|
||||||
|
@property
|
||||||
|
def default_branch(self):
|
||||||
|
return DEFAULT_BRANCH
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_url(url: str) -> object:
|
def get_url(url: str) -> object:
|
||||||
"""
|
"""
|
||||||
|
|
@ -128,7 +145,6 @@ class GitTool:
|
||||||
Get information about submodule from repo_path
|
Get information about submodule from repo_path
|
||||||
:param repo_path: path of repo to get information about submodule
|
:param repo_path: path of repo to get information about submodule
|
||||||
:param add_root: add information about root repository
|
:param add_root: add information about root repository
|
||||||
:param upstream: Use this upstream of root
|
|
||||||
:return:
|
:return:
|
||||||
[{
|
[{
|
||||||
"url": original_url,
|
"url": original_url,
|
||||||
|
|
@ -428,7 +444,7 @@ class GitTool:
|
||||||
"Validate why 2 or more is not submodule.")
|
"Validate why 2 or more is not submodule.")
|
||||||
lst_default.append(OrderedDict([
|
lst_default.append(OrderedDict([
|
||||||
('@remote', repo.original_organization),
|
('@remote', repo.original_organization),
|
||||||
('@revision', "12.0"),
|
('@revision', DEFAULT_BRANCH),
|
||||||
('@sync-j', "4"),
|
('@sync-j', "4"),
|
||||||
('@sync-c', "true"),
|
('@sync-c', "true"),
|
||||||
]))
|
]))
|
||||||
|
|
@ -461,7 +477,7 @@ class GitTool:
|
||||||
if default_remote and not lst_default:
|
if default_remote and not lst_default:
|
||||||
lst_default.append(OrderedDict([
|
lst_default.append(OrderedDict([
|
||||||
('@remote', default_remote),
|
('@remote', default_remote),
|
||||||
('@revision', "12.0"),
|
('@revision', DEFAULT_BRANCH),
|
||||||
('@sync-j', "4"),
|
('@sync-j', "4"),
|
||||||
('@sync-c', "true"),
|
('@sync-c', "true"),
|
||||||
]))
|
]))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue