# HG changeset patch # User Goffi # Date 1285659767 -28800 # Node ID 8253a5ccbe9a4f82752546038c8252b91d437c2c # Parent 21b38ed339a4dfe16a1b462a11648a311609a078 Added sources files saving + misc - source files can be saved to be replayed later - gcp files are now in ~/.gcp (directory is created if needed) - fixed an encoding error in a warning diff -r 21b38ed339a4 -r 8253a5ccbe9a gcp --- a/gcp Tue Sep 28 14:54:13 2010 +0800 +++ b/gcp Tue Sep 28 15:42:47 2010 +0800 @@ -72,7 +72,9 @@ const_DBUS_PATH = "/org/goffi/gcp" const_BUFF_SIZE = 4096 const_PRESERVE = set(['mode','ownership','timestamps']) -const_JOURNAL_PATH = "~/.gcp_journal" +const_FILES_DIR = "~/.gcp" +const_JOURNAL_PATH = const_FILES_DIR + "/journal" +const_SAVED_LIST = const_FILES_DIR + "/saved_list" class DbusObject(dbus.service.Object): @@ -140,6 +142,9 @@ class GCP(): def __init__(self): + files_dir = os.path.expanduser(const_FILES_DIR) + if not os.path.exists(files_dir): + os.makedirs(files_dir) try: sessions_bus = dbus.SessionBus() db_object = sessions_bus.get_object(const_DBUS_INTERFACE, @@ -245,7 +250,7 @@ if os.path.isdir(abspath): full_dest_path = dest_path if os.path.isabs(path) else os.path.normpath(os.path.join(dest_path, path)) if not options.recursive: - warning (_('omitting directory "%s"') % abspath) + warning (_('omitting directory "%s"') % abspath.decode('utf-8','replace')) else: self.__appendDirToList(abspath, full_dest_path, options) else: @@ -437,6 +442,21 @@ parser.add_option("--preserve", action="store", default='mode,ownership,timestamps', help=_("preserve the specified attributes")) + + parser.add_option("--save", action="store", + help=_("Save source arguments")) + + parser.add_option("--force-save", action="store", + help=_("Save source arguments and replace memory if it already exists")) + + parser.add_option("--load", action="store", + help=_("Load source arguments")) + + parser.add_option("--list", action="store_true", default=False, + help=_("List names of saved sources")) + + parser.add_option("--full-list", action="store_true", default=False, + help=_("List names of saved sources and files in it")) parser.add_option("--no-unicode-fix", action="store_false", dest='unicode_fix', default=True, help=_("don't fixe name encoding errors")) #TODO @@ -469,6 +489,41 @@ exit(2) else: options.preserve = preserve + + if options.save or options.load or options.list or options.full_list: + try: + with open(os.path.expanduser(const_SAVED_LIST),'r') as saved_fd: + saved_files = pickle.load(saved_fd) + except: + saved_files={} + + if options.list or options.full_list: + info(_('Saved sources:')) + sources = saved_files.keys() + sources.sort() + for source in sources: + info("\t[%s]" % source) + if options.full_list: + for filename in saved_files[source]: + info("\t\t%s" % filename) + info("---\n") + if not args: + exit(0) + + if options.save or options.force_save: + if saved_files.has_key(options.save) and not options.force_save: + error(_("There is already a saved sources with this name, skipping --save")) + else: + if len(args)>1: + saved_files[options.save] = map(os.path.abspath,args[:-1]) + with open(os.path.expanduser(const_SAVED_LIST),'w') as saved_fd: + pickle.dump(saved_files,saved_fd) + + if options.load: + if not saved_files.has_key(options.load): + error(_("No saved sources with this name, check existing names with --list")) + else: + args = saved_files[options.load] + args #if there is an other instance of gcp, we send options to it if not self._main_instance: