Add arguments --add and --remove to easily edit gitcheckup.txt.

master
voussoir 2020-09-02 09:32:16 -07:00
parent feabddee81
commit cf20c32655
1 changed files with 71 additions and 7 deletions

View File

@ -19,6 +19,12 @@ flags:
--pull:
Run `git pull --all` in each directory.
--add path:
Add path to the gitcheckup.txt file.
--remove path:
Remove path from the gitcheckup.txt file.
Examples:
> gitcheckup
> gitcheckup --fetch
@ -31,6 +37,7 @@ import sys
from voussoirkit import betterhelp
from voussoirkit import dotdict
from voussoirkit import pathclass
from voussoirkit import winwhich
GIT = winwhich.which('git')
@ -61,11 +68,43 @@ def check_output(command):
output = output.decode().strip()
return output
def read_directories_file():
directories_file = os.path.join(os.path.dirname(__file__), 'gitcheckup.txt')
def add_directory(directory):
'''
Add a directory to the gitcheckup.txt file, creating that file if it does
not exist.
'''
directory = pathclass.Path(directory)
try:
handle = open(directories_file, 'r')
directories = set(read_directories_file())
except NoConfigFile:
directories = set()
directories.add(directory)
write_directories_file(directories)
def remove_directory(directory):
'''
Remove a directory from the gitcheckup.txt file.
Raise NoConfigFile if it does not exist.
'''
directory = pathclass.Path(directory)
directories = set(read_directories_file())
try:
directories.remove(directory)
except KeyError:
return
write_directories_file(directories)
def read_directories_file():
'''
Return a list of pathclass.Path from the lines of gitcheckup.txt.
Raise NoConfigFile if it does not exist.
'''
directories_file = pathclass.Path(__file__).parent.with_child('gitcheckup.txt')
try:
handle = open(directories_file.absolute_path, 'r', encoding='utf-8')
except FileNotFoundError as exc:
raise NoConfigFile(exc.filename) from exc
@ -74,9 +113,27 @@ def read_directories_file():
directories = [line.strip() for line in directories]
directories = [line for line in directories if line]
directories = [pathclass.Path(line) for line in directories]
return directories
def write_directories_file(directories):
'''
Write a list of directories to the gitcheckup.txt file.
'''
directories = [pathclass.Path(d) for d in directories]
directories = sorted(directories)
directories = [d.correct_case() for d in directories]
directories = [d.absolute_path for d in directories]
directories_file = pathclass.Path(__file__).parent.with_child('gitcheckup.txt')
handle = open(directories_file.absolute_path, 'w', encoding='utf-8')
with handle:
handle.write('\n'.join(directories))
# GIT FUNCTIONS
################################################################################
def git_commits_between(a, b):
@ -167,8 +224,7 @@ def checkup_pushed():
return details
def gitcheckup(directory, do_fetch=False, do_pull=False):
directory = os.path.abspath(directory)
os.chdir(directory)
os.chdir(directory.absolute_path)
if do_fetch:
git_fetch()
@ -203,13 +259,19 @@ def gitcheckup(directory, do_fetch=False, do_pull=False):
details = ' '.join(details)
details = (' ' + details).rstrip()
print(f'[{committed}][{pushed}] {directory}{details}')
print(f'[{committed}][{pushed}] {directory.absolute_path}{details}')
# COMMAND LINE
################################################################################
def gitcheckup_argparse(args):
if args.add_directory is not None:
add_directory(args.add_directory)
if args.remove_directory is not None:
remove_directory(args.remove_directory)
if args.directories:
directories = args.directories
directories = [pathclass.Path(d) for d in args.directories]
else:
directories = read_directories_file()
@ -222,6 +284,8 @@ def main(argv):
parser.add_argument('directories', nargs='*')
parser.add_argument('--fetch', dest='do_fetch', action='store_true')
parser.add_argument('--pull', dest='do_pull', action='store_true')
parser.add_argument('--add', dest='add_directory')
parser.add_argument('--remove', dest='remove_directory')
parser.set_defaults(func=gitcheckup_argparse)
try: