batchfetch 1.2.0__tar.gz → 1.2.2__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.2.0
3
+ Version: 1.2.2
4
4
  Summary: Efficiently clone and pull multiple Git repositories.
5
5
  Home-page: https://github.com/jamescherti/batchfetch
6
6
  Author: James Cherti
@@ -103,7 +103,7 @@ class BatchFetchGit(TaskBatchFetch):
103
103
 
104
104
  # Backward compatibility
105
105
  if "reference" in self._item_values \
106
- and not "revision" in self._item_values:
106
+ and "revision" not in self._item_values:
107
107
  self._item_values["revision"] = "reference"
108
108
 
109
109
  is_clone = False
@@ -140,11 +140,16 @@ class BatchFetchGit(TaskBatchFetch):
140
140
 
141
141
  self._repo_reset()
142
142
 
143
- git_merge_done = self._repo_pull()
143
+ git_fetch_done = self._repo_fetch()
144
+
144
145
  git_branch_changed = False
145
146
  git_branch_changed = self._repo_fix_branch()
146
147
 
147
- if git_merge_done or git_branch_changed:
148
+ git_merge_done = False
149
+ if git_fetch_done:
150
+ git_merge_done = self._git_merge()
151
+
152
+ if (git_fetch_done and git_merge_done) or git_branch_changed:
148
153
  self._repo_update_submodules()
149
154
 
150
155
  if self.get_changed():
@@ -186,7 +191,7 @@ class BatchFetchGit(TaskBatchFetch):
186
191
  env=self.env,
187
192
  cwd=self.git_local_dir,
188
193
  )
189
- self.current_branch = stdout[0].strip()
194
+ self.current_branch = stdout[0]
190
195
  self.is_branch = True
191
196
  except (IndexError, subprocess.CalledProcessError):
192
197
  # Not a symbolic ref
@@ -234,20 +239,18 @@ class BatchFetchGit(TaskBatchFetch):
234
239
  cmd = ["git", "reset", "--hard", "HEAD"]
235
240
  self._run(cmd, cwd=str(self.git_local_dir), env=self.env)
236
241
 
237
- def _repo_pull(self):
238
- git_merge = False
239
-
242
+ def _repo_fetch(self):
240
243
  # Merge
241
- do_git_pull = self["git_pull"]
244
+ do_git_fetch = self["git_pull"]
242
245
  if self.is_branch:
243
- do_git_pull = True
246
+ do_git_fetch = True
244
247
  elif not self["revision"]:
245
- do_git_pull = True
248
+ do_git_fetch = True
246
249
  self.add_output(self.indent_spaces +
247
250
  "[INFO] Git fetch origin reason: " +
248
251
  "No 'revision:' specified\n")
249
252
  else:
250
- do_git_pull = False
253
+ do_git_fetch = False
251
254
  commit_ref = None
252
255
 
253
256
  try:
@@ -259,14 +262,14 @@ class BatchFetchGit(TaskBatchFetch):
259
262
  pass
260
263
 
261
264
  if not commit_ref and not self.is_branch:
262
- do_git_pull = True
265
+ do_git_fetch = True
263
266
  self.add_output(
264
267
  self.indent_spaces +
265
268
  "[INFO] Git fetch origin reason: " +
266
269
  f"The revision does not exist: {self['revision']}" +
267
270
  "\n")
268
271
 
269
- if not do_git_pull:
272
+ if not do_git_fetch:
270
273
  try:
271
274
  # Check if the branch is a tag or a branch
272
275
  cmd = ["git", "show-ref", "--verify", "--quiet",
@@ -274,14 +277,14 @@ class BatchFetchGit(TaskBatchFetch):
274
277
  run_simple(cmd, env=self.env, cwd=self.git_local_dir)
275
278
  self.add_output(
276
279
  self.indent_spaces +
277
- "[INFO] Git fetch origin reason:" +
280
+ "[INFO] Git fetch origin reason: " +
278
281
  f"{self['revision']} is a branch, not a tag" +
279
282
  "\n")
280
- do_git_pull = True
283
+ do_git_fetch = True
281
284
  except subprocess.CalledProcessError:
282
285
  pass
283
286
 
284
- if not do_git_pull and commit_ref:
287
+ if not do_git_fetch and commit_ref:
285
288
  # This is to check if a tag has been changed
286
289
  try:
287
290
  # If the tag is annotated, it points to a tag object,
@@ -304,14 +307,18 @@ class BatchFetchGit(TaskBatchFetch):
304
307
  f"Commit ref head '{commit_ref_head}' != "
305
308
  f"commit ref '{commit_ref_head}'"
306
309
  "\n")
307
- do_git_pull = True
310
+ do_git_fetch = True
308
311
 
309
- if not do_git_pull:
310
- self.add_output(self.indent_spaces + "[INFO] git pull ignored\n")
311
- return git_merge
312
+ if not do_git_fetch:
313
+ self.add_output(self.indent_spaces + "[INFO] git fetch ignored\n")
314
+ return False
312
315
 
313
316
  # Fetch
314
317
  self._git_fetch_origin()
318
+ return True
319
+
320
+ def _git_merge(self):
321
+ git_merge = False
315
322
 
316
323
  # Merge
317
324
  real_branch = self._git_is_local_branch("HEAD")
@@ -425,11 +432,11 @@ class BatchFetchGit(TaskBatchFetch):
425
432
  git_ref_branch = self._git_tags("origin/" +
426
433
  self["revision"] +
427
434
  "^{commit}")[0]
428
- except GitRevisionDoesNotExist as err:
435
+ except GitRevisionDoesNotExist:
429
436
  # Check if the commit ref exists
430
437
  try:
431
438
  git_ref_branch = self._git_tags(self["revision"])[0]
432
- except GitRevisionoesNotExist as err:
439
+ except GitRevisionDoesNotExist as err:
433
440
  raise BatchFetchError(f"The branch '{self['revision']}' "
434
441
  "does not exist.") from err
435
442
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: batchfetch
3
- Version: 1.2.0
3
+ Version: 1.2.2
4
4
  Summary: Efficiently clone and pull multiple Git repositories.
5
5
  Home-page: https://github.com/jamescherti/batchfetch
6
6
  Author: James Cherti
@@ -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.2.0",
25
+ version="1.2.2",
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
File without changes