batchfetch 1.1.7__tar.gz → 1.1.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: batchfetch
3
- Version: 1.1.7
3
+ Version: 1.1.9
4
4
  Summary: Efficiently clone and pull multiple Git repositories.
5
5
  Home-page: https://github.com/jamescherti/batchfetch
6
6
  Author: James Cherti
@@ -17,10 +17,6 @@ Classifier: Topic :: Utilities
17
17
  Requires-Python: >=3.6, <4
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: colorama
21
- Requires-Dist: schema
22
- Requires-Dist: setproctitle
23
- Requires-Dist: PyYAML
24
20
 
25
21
  # Batchfetch - Efficiently clone or pull multiple Git repositories in parallel
26
22
 
@@ -145,24 +145,19 @@ class TaskBatchFetch(TaskBase):
145
145
 
146
146
  def _run_pre_exec(self, cwd: os.PathLike = Path(".")):
147
147
  self._initialize_data()
148
- for pre_exec in self["exec_before"]:
149
- if not pre_exec:
150
- continue
148
+ cmd = self["exec_before"]
149
+ if self["delete"] or not cmd:
150
+ return
151
151
 
152
- self._run(pre_exec, cwd=str(cwd), env=self.env,
153
- spaces=self.indent)
152
+ self._run(cmd, cwd=str(cwd), env=self.env, spaces=self.indent)
154
153
 
155
154
  def _run_post_exec(self, cwd: os.PathLike = Path(".")):
156
155
  self._initialize_data()
157
- if self["delete"] or not self.is_changed():
156
+ cmd = self["exec_after"]
157
+ if not cmd or self["delete"] or not self.is_changed():
158
158
  return
159
159
 
160
- for post_exec in self["exec_after"]:
161
- if not post_exec:
162
- continue
163
-
164
- self._run(post_exec, cwd=str(cwd), env=self.env,
165
- spaces=self.indent)
160
+ self._run(cmd, cwd=str(cwd), env=self.env, spaces=self.indent)
166
161
 
167
162
  def is_changed(self) -> bool:
168
163
  self._initialize_data()
@@ -195,6 +190,7 @@ class TaskBatchFetch(TaskBase):
195
190
  self.values["result"]["output"] += output
196
191
 
197
192
  def get_output(self) -> str:
193
+ """Return the output."""
198
194
  self._initialize_data()
199
195
  return str(self.values["result"]["output"])
200
196
 
@@ -136,8 +136,7 @@ class BatchFetchGit(TaskBatchFetch):
136
136
 
137
137
  git_merge_done = self._repo_pull()
138
138
  git_branch_changed = False
139
- if self.is_branch:
140
- git_branch_changed = self._repo_fix_branch()
139
+ git_branch_changed = self._repo_fix_branch()
141
140
 
142
141
  if git_merge_done or git_branch_changed:
143
142
  self._repo_update_submodules()
@@ -254,50 +253,52 @@ class BatchFetchGit(TaskBatchFetch):
254
253
  pass
255
254
 
256
255
  if not commit_ref and not self.is_branch:
256
+ do_git_pull = True
257
257
  self.add_output(
258
258
  self.indent_spaces +
259
- "[INFO] Git fetch origin reason:" +
259
+ "[INFO] Git fetch origin reason: " +
260
260
  f"The reference does not exist: {self['reference']}" +
261
261
  "\n")
262
262
 
263
- if not do_git_pull:
264
- try:
265
- # Check if the branch is a tag or a branch
266
- cmd = ["git", "show-ref", "--verify", "--quiet",
267
- f"refs/heads/{self['reference']}"]
268
- run_simple(cmd, env=self.env, cwd=self.git_local_dir)
269
- self.add_output(
270
- self.indent_spaces +
271
- "[INFO] Git fetch origin reason:" +
272
- f"{self['reference']} is a branch, not a tag" +
273
- "\n")
274
- do_git_pull = True
275
- except subprocess.CalledProcessError:
276
- pass
277
-
278
- # if not do_git_pull:
279
- # try:
280
- # # If the tag is annotated, it points to a tag object,
281
- # # not directly to a commit. You need to resolve it to
282
- # # the commit it points to. Using `git rev-parse
283
- # # <tagname>^{commit}` allows getting the right
284
- # # reference.
285
- # commit_ref_head = self._git_tags("HEAD^{commit}")[0]
286
- # commit_ref_head = commit_ref_head.strip()
287
- # except GitReferenceDoesNotExist:
288
- # # HEAD is detached
289
- # commit_ref_head = None
290
- #
291
- # # The wanted commit reference does not exist
292
- # # Or the commit ref of HEAD hasn't changed
293
- # if not commit_ref_head or commit_ref_head != commit_ref:
294
- # self.add_output(
295
- # self.indent_spaces +
296
- # "[INFO] Git fetch origin reason: "
297
- # f"Commit ref head '{commit_ref_head}' != "
298
- # f"commit ref '{commit_ref_head}'"
299
- # "\n")
300
- # do_git_pull = True
263
+ if not do_git_pull:
264
+ try:
265
+ # Check if the branch is a tag or a branch
266
+ cmd = ["git", "show-ref", "--verify", "--quiet",
267
+ f"refs/heads/{self['reference']}"]
268
+ run_simple(cmd, env=self.env, cwd=self.git_local_dir)
269
+ self.add_output(
270
+ self.indent_spaces +
271
+ "[INFO] Git fetch origin reason:" +
272
+ f"{self['reference']} is a branch, not a tag" +
273
+ "\n")
274
+ do_git_pull = True
275
+ except subprocess.CalledProcessError:
276
+ pass
277
+
278
+ if not do_git_pull and commit_ref:
279
+ # This is to check if a tag has been changed
280
+ try:
281
+ # If the tag is annotated, it points to a tag object,
282
+ # not directly to a commit. You need to resolve it to
283
+ # the commit it points to. Using `git rev-parse
284
+ # <tagname>^{commit}` allows getting the right
285
+ # reference.
286
+ commit_ref_head = self._git_tags("HEAD^{commit}")[0]
287
+ commit_ref_head = commit_ref_head.strip()
288
+ except GitReferenceDoesNotExist:
289
+ # HEAD is detached
290
+ commit_ref_head = None
291
+
292
+ # The wanted commit reference does not exist
293
+ # Or the commit ref of HEAD hasn't changed
294
+ if not commit_ref_head or commit_ref_head != commit_ref:
295
+ self.add_output(
296
+ self.indent_spaces +
297
+ "[INFO] Git fetch origin reason: "
298
+ f"Commit ref head '{commit_ref_head}' != "
299
+ f"commit ref '{commit_ref_head}'"
300
+ "\n")
301
+ do_git_pull = True
301
302
 
302
303
  if not do_git_pull:
303
304
  self.add_output(self.indent_spaces + "[INFO] git pull ignored\n")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: batchfetch
3
- Version: 1.1.7
3
+ Version: 1.1.9
4
4
  Summary: Efficiently clone and pull multiple Git repositories.
5
5
  Home-page: https://github.com/jamescherti/batchfetch
6
6
  Author: James Cherti
@@ -17,10 +17,6 @@ Classifier: Topic :: Utilities
17
17
  Requires-Python: >=3.6, <4
18
18
  Description-Content-Type: text/markdown
19
19
  License-File: LICENSE
20
- Requires-Dist: colorama
21
- Requires-Dist: schema
22
- Requires-Dist: setproctitle
23
- Requires-Dist: PyYAML
24
20
 
25
21
  # Batchfetch - Efficiently clone or pull multiple Git repositories in parallel
26
22
 
@@ -1,7 +1,5 @@
1
- .gitignore
2
1
  LICENSE
3
2
  README.md
4
- run_tests.sh
5
3
  setup.py
6
4
  batchfetch/__init__.py
7
5
  batchfetch/batchfetch_base.py
@@ -13,7 +11,4 @@ batchfetch.egg-info/SOURCES.txt
13
11
  batchfetch.egg-info/dependency_links.txt
14
12
  batchfetch.egg-info/entry_points.txt
15
13
  batchfetch.egg-info/requires.txt
16
- batchfetch.egg-info/top_level.txt
17
- tests/test_helpers.py
18
- tests/data/test-md5sum.txt
19
- tests/data/test-run_simple.sh
14
+ batchfetch.egg-info/top_level.txt
@@ -22,7 +22,7 @@ from setuptools import find_packages, setup
22
22
 
23
23
  setup(
24
24
  name="batchfetch",
25
- version="1.1.7",
25
+ version="1.1.9",
26
26
  packages=find_packages(),
27
27
  description="Efficiently clone and pull multiple Git repositories.",
28
28
  license="GPLv3",
@@ -1,138 +0,0 @@
1
- # Byte-compiled / optimized / DLL files
2
- __pycache__/
3
- *.py[cod]
4
- *$py.class
5
-
6
- # C extensions
7
- *.so
8
-
9
- # Distribution / packaging
10
- .Python
11
- build/
12
- develop-eggs/
13
- dist/
14
- downloads/
15
- eggs/
16
- .eggs/
17
- lib/
18
- lib64/
19
- parts/
20
- sdist/
21
- var/
22
- wheels/
23
- share/python-wheels/
24
- *.egg-info/
25
- .installed.cfg
26
- *.egg
27
- MANIFEST
28
-
29
- # PyInstaller
30
- # Usually these files are written by a python script from a template
31
- # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
- *.manifest
33
- *.spec
34
-
35
- # Installer logs
36
- pip-log.txt
37
- pip-delete-this-directory.txt
38
-
39
- # Unit test / coverage reports
40
- htmlcov/
41
- .tox/
42
- .nox/
43
- .coverage
44
- .coverage.*
45
- .cache
46
- nosetests.xml
47
- coverage.xml
48
- *.cover
49
- *.py,cover
50
- .hypothesis/
51
- .pytest_cache/
52
- cover/
53
-
54
- # Translations
55
- *.mo
56
- *.pot
57
-
58
- # Django stuff:
59
- *.log
60
- local_settings.py
61
- db.sqlite3
62
- db.sqlite3-journal
63
-
64
- # Flask stuff:
65
- instance/
66
- .webassets-cache
67
-
68
- # Scrapy stuff:
69
- .scrapy
70
-
71
- # Sphinx documentation
72
- docs/_build/
73
-
74
- # PyBuilder
75
- .pybuilder/
76
- target/
77
-
78
- # Jupyter Notebook
79
- .ipynb_checkpoints
80
-
81
- # IPython
82
- profile_default/
83
- ipython_config.py
84
-
85
- # pyenv
86
- # For a library or package, you might want to ignore these files since the code is
87
- # intended to run in multiple environments; otherwise, check them in:
88
- # .python-version
89
-
90
- # pipenv
91
- # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
- # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
- # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
- # install all needed dependencies.
95
- #Pipfile.lock
96
-
97
- # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98
- __pypackages__/
99
-
100
- # Celery stuff
101
- celerybeat-schedule
102
- celerybeat.pid
103
-
104
- # SageMath parsed files
105
- *.sage.py
106
-
107
- # Environments
108
- .env
109
- .venv
110
- env/
111
- venv/
112
- ENV/
113
- env.bak/
114
- venv.bak/
115
-
116
- # Spyder project settings
117
- .spyderproject
118
- .spyproject
119
-
120
- # Rope project settings
121
- .ropeproject
122
-
123
- # mkdocs documentation
124
- /site
125
-
126
- # mypy
127
- .mypy_cache/
128
- .dmypy.json
129
- dmypy.json
130
-
131
- # Pyre type checker
132
- .pyre/
133
-
134
- # pytype static type analyzer
135
- .pytype/
136
-
137
- # Cython debug symbols
138
- cython_debug/
@@ -1,23 +0,0 @@
1
- #!/usr/bin/env bash
2
- #
3
- # Copyright (C) 2024 James Cherti
4
- # URL: https://github.com/jamescherti/batchfetch
5
- #
6
- # This program is free software: you can redistribute it and/or modify it under
7
- # the terms of the GNU General Public License as published by the Free Software
8
- # Foundation, either version 3 of the License, or (at your option) any later
9
- # version.
10
- #
11
- # This program is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along with
16
- # this program. If not, see <https://www.gnu.org/licenses/>.
17
- #
18
- cd "$(dirname "${BASH_SOURCE[0]}")"
19
- export PYTHONPATH="$(pwd)"
20
- exec pytest -v -v --cov=batchfetch --cov=tests \
21
- --cov-report=term \
22
- --cov-report=html:htmlcov \
23
- tests/test_*py
@@ -1,3 +0,0 @@
1
- Test 1.
2
- Test 2.
3
- Test 3.
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- cd "$(dirname "${BASH_SOURCE[0]}")"
4
- cat ./test-md5sum.txt
5
- cat ./test-md5sum.txt | tail -n 1 >&2
@@ -1,56 +0,0 @@
1
- #!/usr/bin/env python
2
- #
3
- # Copyright (C) 2024 James Cherti
4
- # URL: https://github.com/jamescherti/batchfetch
5
- #
6
- # This program is free software: you can redistribute it and/or modify it under
7
- # the terms of the GNU General Public License as published by the Free Software
8
- # Foundation, either version 3 of the License, or (at your option) any later
9
- # version.
10
- #
11
- # This program is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
14
- #
15
- # You should have received a copy of the GNU General Public License along with
16
- # this program. If not, see <https://www.gnu.org/licenses/>.
17
- #
18
- """Unit tests."""
19
-
20
- from pathlib import Path
21
-
22
- from batchfetch import helpers
23
-
24
- DATA_PATH = Path(".").joinpath("tests", "data").absolute()
25
- SCRIPT_RUN_SIMPLE = DATA_PATH / "test-run_simple.sh"
26
- TEST_MD5SUM_FILE = DATA_PATH / "test-md5sum.txt"
27
-
28
-
29
- def test_md5sum():
30
- md5sum = helpers.md5sum(TEST_MD5SUM_FILE)
31
- assert md5sum == "f31e127edc87a6aa2eb01b7d94d2ec58"
32
-
33
-
34
- def test_run_simple():
35
- # Stdout
36
- stdout_lines, stderr_lines = helpers.run_simple(str(SCRIPT_RUN_SIMPLE))
37
- assert stdout_lines == ['Test 1.',
38
- 'Test 2.',
39
- 'Test 3.']
40
- assert stderr_lines == ['Test 3.']
41
-
42
-
43
- def test_indent_raw_output():
44
- list_str = \
45
- helpers.indent_raw_output(["Test 1.", "Test 2."])
46
-
47
- assert list_str == [" Test 1.", " Test 2."]
48
-
49
-
50
- def test_run_indent():
51
- stdout_lines, stderr_lines = helpers.run_indent(str(SCRIPT_RUN_SIMPLE))
52
- assert stdout_lines == [f' [RUN] {str(SCRIPT_RUN_SIMPLE)}',
53
- ' Test 1.',
54
- ' Test 2.',
55
- ' Test 3.']
56
- assert stderr_lines == [' Test 3.']
File without changes
File without changes
@@ -1,4 +1,4 @@
1
+ PyYAML
1
2
  colorama
2
3
  schema
3
4
  setproctitle
4
- PyYAML
File without changes