X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=notmuch-git.py;h=0cbfec616e81f9ee2ea78e91ebdd1037d39a4465;hb=a01378e48d97694b0061870c0ba1fc2913e0affb;hp=04cdae0f2ec433551100827cac8cbc3150b1ca16;hpb=803ac83c467e440a64fbde4628bee8673b4db01d;p=notmuch diff --git a/notmuch-git.py b/notmuch-git.py index 04cdae0f..0cbfec61 100644 --- a/notmuch-git.py +++ b/notmuch-git.py @@ -43,24 +43,16 @@ import subprocess as _subprocess import sys as _sys import tempfile as _tempfile import textwrap as _textwrap -try: # Python 3 - from urllib.parse import quote as _quote - from urllib.parse import unquote as _unquote -except ImportError: # Python 2 - from urllib import quote as _quote - from urllib import unquote as _unquote +from urllib.parse import quote as _quote +from urllib.parse import unquote as _unquote _LOG = _logging.getLogger('nmbug') _LOG.setLevel(_logging.WARNING) _LOG.addHandler(_logging.StreamHandler()) -NMBGIT = _os.path.expanduser( - _os.getenv('NMBGIT', _os.path.join('~', '.nmbug'))) -_NMBGIT = _os.path.join(NMBGIT, '.git') -if _os.path.isdir(_NMBGIT): - NMBGIT = _NMBGIT +NMBGIT = None +TAG_PREFIX = None -TAG_PREFIX = _os.getenv('NMBPREFIX', 'notmuch::') _HEX_ESCAPE_REGEX = _re.compile('%[0-9A-F]{2}') _TAG_DIRECTORY = 'tags/' _TAG_FILE_REGEX = _re.compile(_TAG_DIRECTORY + '(?P[^/]*)/(?P[^/]*)') @@ -68,31 +60,6 @@ _TAG_FILE_REGEX = _re.compile(_TAG_DIRECTORY + '(?P[^/]*)/(?P[^/]*)') # magic hash for Git (git hash-object -t blob /dev/null) _EMPTYBLOB = 'e69de29bb2d1d6434b8b29ae775ad8c2e48c5391' - -try: - getattr(_tempfile, 'TemporaryDirectory') -except AttributeError: # Python < 3.2 - class _TemporaryDirectory(object): - """ - Fallback context manager for Python < 3.2 - - See PEP 343 for details on context managers [1]. - - [1]: https://www.python.org/dev/peps/pep-0343/ - """ - def __init__(self, **kwargs): - self.name = _tempfile.mkdtemp(**kwargs) - - def __enter__(self): - return self.name - - def __exit__(self, type, value, traceback): - _shutil.rmtree(self.name) - - - _tempfile.TemporaryDirectory = _TemporaryDirectory - - def _hex_quote(string, safe='+@=:,'): """ quote('abc def') -> 'abc%20def'. @@ -106,10 +73,6 @@ def _hex_quote(string, safe='+@=:,'): lambda match: match.group(0).lower(), uppercase_escapes) - -_ENCODED_TAG_PREFIX = _hex_quote(TAG_PREFIX, safe='+@=,') # quote ':' - - def _xapian_quote(string): """ Quote a string for Xapian's QueryParser. @@ -308,7 +271,13 @@ def clone(repository): wait=True) _git(args=['config', '--unset', 'core.worktree'], wait=True, expect=(0, 5)) _git(args=['config', 'core.bare', 'true'], wait=True) - _git(args=['branch', 'config', 'origin/config'], wait=True) + (status, stdout, stderr) = _git(args=['show-ref', '--verify', + '--quiet', + 'refs/remotes/origin/config'], + expect=(0,1), + wait=True) + if status == 0: + _git(args=['branch', 'config', 'origin/config'], wait=True) existing_tags = get_tags() if existing_tags: _LOG.warning( @@ -715,6 +684,13 @@ if __name__ == '__main__': parser = argparse.ArgumentParser( description=__doc__.strip(), formatter_class=argparse.RawDescriptionHelpFormatter) + parser.add_argument( + '-C', '--git-dir', metavar='REPO', + help='Git repository to operate on.') + parser.add_argument( + '-p', '--tag-prefix', metavar='PREFIX', + default = _os.getenv('NMBPREFIX', 'notmuch::'), + help='Prefix of tags to operate on.') parser.add_argument( '-l', '--log-level', choices=['critical', 'error', 'warning', 'info', 'debug'], @@ -824,6 +800,18 @@ if __name__ == '__main__': args = parser.parse_args() + if args.git_dir: + NMBGIT = args.git_dir + else: + NMBGIT = _os.path.expanduser( + _os.getenv('NMBGIT', _os.path.join('~', '.nmbug'))) + _NMBGIT = _os.path.join(NMBGIT, '.git') + if _os.path.isdir(_NMBGIT): + NMBGIT = _NMBGIT + + TAG_PREFIX = args.tag_prefix + _ENCODED_TAG_PREFIX = _hex_quote(TAG_PREFIX, safe='+@=,') # quote ':' + if args.log_level: level = getattr(_logging, args.log_level.upper()) _LOG.setLevel(level)