A console script that allows you to easily update multiple git repositories at once
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

61 wiersze
1.9 KiB

  1. # -*- coding: utf-8 -*-
  2. #
  3. # Copyright (C) 2011-2018 Ben Kurtovic <ben.kurtovic@gmail.com>
  4. # Released under the terms of the MIT License. See LICENSE for details.
  5. import os
  6. try:
  7. from configparser import ConfigParser, NoSectionError
  8. PY3K = True
  9. except ImportError: # Python 2
  10. from ConfigParser import SafeConfigParser as ConfigParser, NoSectionError
  11. PY3K = False
  12. __all__ = ["run_migrations"]
  13. def _get_old_path():
  14. """Return the old default path to the configuration file."""
  15. xdg_cfg = os.environ.get("XDG_CONFIG_HOME") or os.path.join("~", ".config")
  16. return os.path.join(os.path.expanduser(xdg_cfg), "gitup", "config.ini")
  17. def _migrate_old_path():
  18. """Migrate the old config location (~/.gitup) to the new one."""
  19. old_path = os.path.expanduser(os.path.join("~", ".gitup"))
  20. if not os.path.exists(old_path):
  21. return
  22. temp_path = _get_old_path()
  23. temp_dir = os.path.dirname(temp_path)
  24. if not os.path.exists(temp_dir):
  25. os.makedirs(temp_dir)
  26. os.rename(old_path, temp_path)
  27. def _migrate_old_format():
  28. """Migrate the old config file format (.INI) to our custom list format."""
  29. old_path = _get_old_path()
  30. if not os.path.exists(old_path):
  31. return
  32. config = ConfigParser(delimiters="=") if PY3K else ConfigParser()
  33. config.optionxform = lambda opt: opt
  34. config.read(old_path)
  35. try:
  36. bookmarks = [path for path, _ in config.items("bookmarks")]
  37. except NoSectionError:
  38. bookmarks = []
  39. if PY3K:
  40. bookmarks = [path.encode("utf8") for path in bookmarks]
  41. new_path = os.path.join(os.path.split(old_path)[0], "bookmarks")
  42. os.rename(old_path, new_path)
  43. with open(new_path, "wb") as handle:
  44. handle.write(b"\n".join(bookmarks))
  45. def run_migrations():
  46. """Run any necessary migrations to ensure the config file is up-to-date."""
  47. _migrate_old_path()
  48. _migrate_old_format()