Browse Source

Add '--bookmark-file' option to support multiple bookmark config files.

tags/v0.4
Ben Kurtovic 8 years ago
parent
commit
fa3bb4d9a1
3 changed files with 39 additions and 30 deletions
  1. +1
    -0
      CHANGELOG
  2. +24
    -24
      gitup/config.py
  3. +14
    -6
      gitup/script.py

+ 1
- 0
CHANGELOG View File

@@ -2,6 +2,7 @@ v0.3.1 (unreleased):

- Added a `--prune` flag to delete remote-tracking branches that no longer
exist on their remote after fetching.
- Added a '--bookmark-file' option to support multiple bookmark config files.
- Fixed a bug related to Python 3 compatibility.

v0.3 (released June 7, 2015):


+ 24
- 24
gitup/config.py View File

@@ -14,8 +14,8 @@ except ImportError: # Python 2

from colorama import Fore, Style

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

YELLOW = Fore.YELLOW + Style.BRIGHT
RED = Fore.RED + Style.BRIGHT
@@ -25,50 +25,50 @@ INDENT1 = " " * 3
def _ensure_dirs(path):
"""Ensure the directories within the given pathname exist."""
dirname = os.path.dirname(path)
if not os.path.exists(dirname): # Race condition, meh...
if dirname and not os.path.exists(dirname): # Race condition, meh...
os.makedirs(dirname)

def _get_config_path():
"""Return the path to the configuration file."""
xdg_cfg = os.environ.get("XDG_CONFIG_HOME") or os.path.join("~", ".config")
return os.path.join(os.path.expanduser(xdg_cfg), "gitup", "config.ini")

def _migrate_old_config_path():
"""Migrate the old config location (~/.gitup) to the new one."""
old_path = os.path.expanduser(os.path.join("~", ".gitup"))
if os.path.exists(old_path):
new_path = _get_config_path()
new_path = get_default_config_path()
_ensure_dirs(new_path)
os.rename(old_path, new_path)

def _load_config_file():
def _load_config_file(config_path=None):
"""Read the config file and return a SafeConfigParser() object."""
_migrate_old_config_path()
config = configparser.SafeConfigParser()
# Don't lowercase option names, because we are storing paths there:
config.optionxform = lambda opt: opt
config.read(_get_config_path())
config.read(config_path or get_default_config_path())
return config

def _save_config_file(config):
"""Save config changes to the config file returned by _get_config_path."""
def _save_config_file(config, config_path=None):
"""Save config changes to the given config file."""
_migrate_old_config_path()
cfg_path = _get_config_path()
cfg_path = config_path or get_default_config_path()
_ensure_dirs(cfg_path)
with open(cfg_path, "w") as config_file:
config.write(config_file)

def get_bookmarks():
def get_default_config_path():
"""Return the default path to the configuration file."""
xdg_cfg = os.environ.get("XDG_CONFIG_HOME") or os.path.join("~", ".config")
return os.path.join(os.path.expanduser(xdg_cfg), "gitup", "config.ini")

def get_bookmarks(config_path=None):
"""Get a list of all bookmarks, or an empty list if there are none."""
config = _load_config_file()
config = _load_config_file(config_path)
try:
return [path for path, _ in config.items("bookmarks")]
except configparser.NoSectionError:
return []

def add_bookmarks(paths):
def add_bookmarks(paths, config_path=None):
"""Add a list of paths as bookmarks to the config file."""
config = _load_config_file()
config = _load_config_file(config_path)
if not config.has_section("bookmarks"):
config.add_section("bookmarks")

@@ -81,7 +81,7 @@ def add_bookmarks(paths):
path_name = os.path.split(path)[1]
config.set("bookmarks", path, path_name)
added.append(path)
_save_config_file(config)
_save_config_file(config, config_path)

if added:
print(YELLOW + "Added bookmarks:")
@@ -92,9 +92,9 @@ def add_bookmarks(paths):
for path in exists:
print(INDENT1, path)

def delete_bookmarks(paths):
def delete_bookmarks(paths, config_path=None):
"""Remove a list of paths from the bookmark config file."""
config = _load_config_file()
config = _load_config_file(config_path)

deleted, notmarked = [], []
if config.has_section("bookmarks"):
@@ -105,7 +105,7 @@ def delete_bookmarks(paths):
deleted.append(path)
else:
notmarked.append(path)
_save_config_file(config)
_save_config_file(config, config_path)
else:
notmarked = [os.path.abspath(path) for path in paths]

@@ -118,9 +118,9 @@ def delete_bookmarks(paths):
for path in notmarked:
print(INDENT1, path)

def list_bookmarks():
def list_bookmarks(config_path=None):
"""Print all of our current bookmarks."""
bookmarks = get_bookmarks()
bookmarks = get_bookmarks(config_path=config_path)
if bookmarks:
print(YELLOW + "Current bookmarks:")
for bookmark_path in bookmarks:


+ 14
- 6
gitup/script.py View File

@@ -6,12 +6,13 @@
from __future__ import print_function

import argparse
import os

from colorama import init as color_init, Fore, Style

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

def main():
@@ -54,6 +55,10 @@ def main():
group_b.add_argument(
'-l', '--list', dest="list_bookmarks", action="store_true",
help="list current bookmarks")
group_b.add_argument(
'-b', '--bookmark-file', nargs="?", metavar="path",
help="use a specific bookmark config file (default: {0})".format(
get_default_config_path()))

group_m.add_argument(
'-h', '--help', action="help", help="show this help message and exit")
@@ -81,21 +86,24 @@ def main():
"upstream branch and can be safely fast-forwarded. Use "
"--fetch-only to\navoid updating any branches.\n")

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

acted = False
if args.bookmarks_to_add:
add_bookmarks(args.bookmarks_to_add)
add_bookmarks(args.bookmarks_to_add, args.bookmark_file)
acted = True
if args.bookmarks_to_del:
delete_bookmarks(args.bookmarks_to_del)
delete_bookmarks(args.bookmarks_to_del, args.bookmark_file)
acted = True
if args.list_bookmarks:
list_bookmarks()
list_bookmarks(args.bookmark_file)
acted = True
if args.directories_to_update:
update_directories(args.directories_to_update, update_args)
acted = True
if args.update or not acted:
update_bookmarks(get_bookmarks(), update_args)
update_bookmarks(get_bookmarks(args.bookmark_file), update_args)

def run():
"""Thin wrapper for main() that catches KeyboardInterrupts."""


Loading…
Cancel
Save