Browse Source

Start working on integrated test suite, refactor

tags/v0.5.1
Ben Kurtovic 6 years ago
parent
commit
fea24e0a74
12 changed files with 107 additions and 30 deletions
  1. +5
    -3
      .gitignore
  2. +3
    -1
      CHANGELOG
  3. +23
    -0
      Pipfile
  4. +1
    -1
      README.md
  5. +1
    -1
      gitup/__main__.py
  6. +22
    -18
      gitup/cli.py
  7. +2
    -2
      gitup/config.py
  8. +1
    -1
      gitup/migrate.py
  9. +10
    -0
      gitup/test/__init__.py
  10. +14
    -0
      gitup/test/test_bookmarks.py
  11. +24
    -0
      gitup/test/test_cli.py
  12. +1
    -3
      setup.py

+ 5
- 3
.gitignore View File

@@ -2,6 +2,8 @@
*.egg *.egg
*.egg-info *.egg-info
.DS_Store .DS_Store
__pycache__
build
dist
Pipfile.lock
__pycache__/
.pytest_cache/
build/
dist/

+ 3
- 1
CHANGELOG View File

@@ -1,6 +1,8 @@
v0.6 (unreleased): v0.6 (unreleased):


- ...
- Add an integrated pytest testing suite, runnable with `--selftest`.
- Refactor internals, remove deprecated options, and drop support for
end-of-life Python versions.


v0.5 (released August 28, 2018): v0.5 (released August 28, 2018):




+ 23
- 0
Pipfile View File

@@ -0,0 +1,23 @@
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[dev-packages]
pylint = "*"
pytest = "*"
twine = "*"

[packages]
"e1839a8" = {path = ".", editable = true}
GitPython = ">= 2.1.8"
colorama = ">= 0.3.9"

[requires]
python_version = "3.7"

[scripts]
test = "pytest gitup -v -rxw"
lint = "pylint --disable=missing-docstring --output-format=colorized gitup"
cloc = "cloc --vcs=git"
build = "python setup.py sdist bdist_wheel --universal"

+ 1
- 1
README.md View File

@@ -5,7 +5,7 @@ enough to handle several remotes, dirty working directories, diverged local
branches, detached HEADs, and more. It was originally created to manage a large branches, detached HEADs, and more. It was originally created to manage a large
collection of projects and deal with sporadic internet access. collection of projects and deal with sporadic internet access.


gitup should work on OS X, Linux, and Windows. You should have the latest
gitup should work on macOS, Linux, and Windows. You should have the latest
version of git and either Python 2.7 or Python 3 installed. version of git and either Python 2.7 or Python 3 installed.


# Installation # Installation


+ 1
- 1
gitup/__main__.py View File

@@ -3,7 +3,7 @@
# Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com> # Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com>
# Released under the terms of the MIT License. See LICENSE for details. # Released under the terms of the MIT License. See LICENSE for details.


from .script import run
from gitup.cli import run


if __name__ == "__main__": if __name__ == "__main__":
run() run()

gitup/script.py → gitup/cli.py View File

@@ -10,12 +10,12 @@ import os
import platform import platform
import sys import sys


from colorama import init as color_init, Fore, Style
from colorama import init as color_init, Style


from . import __version__
from .config import (get_default_config_path, get_bookmarks, add_bookmarks,
delete_bookmarks, list_bookmarks, clean_bookmarks)
from .update import update_bookmarks, update_directories, run_command
from gitup import __version__
from gitup.config import (get_default_config_path, get_bookmarks, add_bookmarks,
delete_bookmarks, list_bookmarks, clean_bookmarks)
from gitup.update import update_bookmarks, update_directories, run_command


def _decode(path): def _decode(path):
"""Decode the given string using the system's filesystem encoding.""" """Decode the given string using the system's filesystem encoding."""
@@ -23,8 +23,8 @@ def _decode(path):
return path return path
return path.decode(sys.getfilesystemencoding()) return path.decode(sys.getfilesystemencoding())


def main():
"""Parse arguments and then call the appropriate function(s)."""
def _build_parser():
"""Build and return the argument parser."""
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description="Easily update multiple git repositories at once.", description="Easily update multiple git repositories at once.",
epilog=""" epilog="""
@@ -87,25 +87,29 @@ def main():
'-v', '--version', action="version", '-v', '--version', action="version",
version="gitup {0} (Python {1})".format( version="gitup {0} (Python {1})".format(
__version__, platform.python_version())) __version__, platform.python_version()))
group_m.add_argument(
'--selftest', action="store_true",
help="run integrated test suite and exit (pytest must be available)")


# TODO: deprecated arguments, for removal in v1.0:
parser.add_argument(
'-m', '--merge', action="store_true", help=argparse.SUPPRESS)
parser.add_argument(
'-r', '--rebase', action="store_true", help=argparse.SUPPRESS)
return parser


def _selftest():
"""Run the integrated test suite with pytest."""
from .test import run_tests
run_tests()

def main():
"""Parse arguments and then call the appropriate function(s)."""
parser = _build_parser()
color_init(autoreset=True) color_init(autoreset=True)
args = parser.parse_args() args = parser.parse_args()


print(Style.BRIGHT + "gitup" + Style.RESET_ALL + ": the git-repo-updater") print(Style.BRIGHT + "gitup" + Style.RESET_ALL + ": the git-repo-updater")
print() print()


# TODO: remove in v1.0
if args.merge or args.rebase:
print(Style.BRIGHT + Fore.YELLOW + "Warning:", "--merge and --rebase "
"are deprecated. Branches are only updated if they\ntrack an "
"upstream branch and can be safely fast-forwarded. Use "
"--fetch-only to\navoid updating any branches.\n")
if args.selftest:
_selftest()
return


if args.bookmark_file: if args.bookmark_file:
args.bookmark_file = os.path.expanduser(args.bookmark_file) args.bookmark_file = os.path.expanduser(args.bookmark_file)

+ 2
- 2
gitup/config.py View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2011-2016 Ben Kurtovic <ben.kurtovic@gmail.com>
# Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com>
# Released under the terms of the MIT License. See LICENSE for details. # Released under the terms of the MIT License. See LICENSE for details.


from __future__ import print_function from __future__ import print_function
@@ -10,7 +10,7 @@ import os


from colorama import Fore, Style from colorama import Fore, Style


from .migrate import run_migrations
from gitup.migrate import run_migrations


__all__ = ["get_default_config_path", "get_bookmarks", "add_bookmarks", __all__ = ["get_default_config_path", "get_bookmarks", "add_bookmarks",
"delete_bookmarks", "list_bookmarks", "clean_bookmarks"] "delete_bookmarks", "list_bookmarks", "clean_bookmarks"]


+ 1
- 1
gitup/migrate.py View File

@@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright (C) 2011-2016 Ben Kurtovic <ben.kurtovic@gmail.com>
# Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com>
# Released under the terms of the MIT License. See LICENSE for details. # Released under the terms of the MIT License. See LICENSE for details.


import os import os


+ 10
- 0
gitup/test/__init__.py View File

@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com>
# Released under the terms of the MIT License. See LICENSE for details.

def run_tests(args=None):
import pytest
if args is None:
args = ["-v", "-rxw"]
return pytest.main(args)

+ 14
- 0
gitup/test/test_bookmarks.py View File

@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com>
# Released under the terms of the MIT License. See LICENSE for details.

from __future__ import print_function, unicode_literals

from gitup import config

def test_empty_list(tmpdir, capsys):
config_path = tmpdir / "config"
config.list_bookmarks(config_path)
captured = capsys.readouterr()
assert captured.out == "You have no bookmarks to display.\n"

+ 24
- 0
gitup/test/test_cli.py View File

@@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
#
# Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com>
# Released under the terms of the MIT License. See LICENSE for details.

from __future__ import print_function, unicode_literals

import platform
import subprocess
import sys

from gitup import __version__

def run_cli(*args):
cmd = [sys.executable, "-m", "gitup"] + list(args)
output = subprocess.check_output(cmd)
return output.strip().decode("utf8")

def test_cli_version():
"""make sure we're using the right version of gitup"""
output = run_cli("-v")
expected = "gitup {} (Python {})".format(
__version__, platform.python_version())
assert output == expected

+ 1
- 3
setup.py View File

@@ -18,7 +18,7 @@ with open('README.md') as fp:
setup( setup(
name = "gitup", name = "gitup",
packages = find_packages(), packages = find_packages(),
entry_points = {"console_scripts": ["gitup = gitup.script:run"]},
entry_points = {"console_scripts": ["gitup = gitup.cli:run"]},
install_requires = ["GitPython >= 2.1.8", "colorama >= 0.3.9"], install_requires = ["GitPython >= 2.1.8", "colorama >= 0.3.9"],
version = __version__, version = __version__,
author = "Ben Kurtovic", author = "Ben Kurtovic",
@@ -41,8 +41,6 @@ setup(
"Programming Language :: Python", "Programming Language :: Python",
"Programming Language :: Python :: 2.7", "Programming Language :: Python :: 2.7",
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.2",
"Programming Language :: Python :: 3.3",
"Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.4",
"Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.6",


Loading…
Cancel
Save