diff --git a/gramps/cli/arghandler.py b/gramps/cli/arghandler.py index 1af9c0dd7..4a07dba77 100644 --- a/gramps/cli/arghandler.py +++ b/gramps/cli/arghandler.py @@ -177,6 +177,7 @@ class ArgHandler(object): self.cl = 0 self.imports = [] self.exports = [] + self.removes = parser.removes self.open = self.__handle_open_option(parser.open, parser.create) self.sanitize_args(parser.imports, parser.exports) @@ -403,6 +404,15 @@ class ArgHandler(object): else: return + # Handle the "--remove" Family Tree + if self.removes: + for name in self.removes: + self.dbman.remove_database(name) + if should_exit: + sys.exit(0) + else: + return + # Handle the "-L" List Family Trees in detail option. if self.list_more: self.dbman.print_family_tree_summaries() diff --git a/gramps/cli/argparser.py b/gramps/cli/argparser.py index b06d22045..0ff80ef9c 100644 --- a/gramps/cli/argparser.py +++ b/gramps/cli/argparser.py @@ -62,6 +62,7 @@ Application options -C, --create=FAMILY_TREE Create on open if new Family Tree -i, --import=FILENAME Import file -e, --export=FILENAME Export file + -r, --remove=FAMILY_TREE Remove a Family Tree -f, --format=FORMAT Specify Family Tree format -a, --action=ACTION Specify action -p, --options=OPTIONS_STRING Specify options @@ -137,6 +138,7 @@ class ArgParser(object): -C, --create=FAMILY_TREE Create on open if new Family Tree -i, --import=FILENAME Import file -e, --export=FILENAME Export file + -r, --remove=FAMILY_TREE Remove a Family Tree -f, --format=FORMAT Specify Family Tree format -a, --action=ACTION Specify action -p, --options=OPTIONS_STRING Specify options @@ -194,6 +196,7 @@ class ArgParser(object): self.exports = [] self.actions = [] self.imports = [] + self.removes = [] self.imp_db_path = None self.list = False self.list_more = False @@ -267,6 +270,8 @@ class ArgParser(object): and options[opt_ix + 1][0] in ( '-f', '--format'): family_tree_format = options[opt_ix + 1][1] self.imports.append((value, family_tree_format)) + elif option in ['-r', '--remove']: + self.removes.append(value) elif option in ['-e', '--export']: family_tree_format = None if opt_ix < len(options) - 1 \ @@ -359,9 +364,10 @@ class ArgParser(object): for ind in cleandbg: del options[ind] - if len(options) > 0 and self.open is None and self.imports == [] \ - and not (self.list or self.list_more or self.list_table or - self.help or self.runqml): + if (len(options) > 0 and self.open is None and self.imports == [] + and self.removes == [] + and not (self.list or self.list_more or self.list_table or + self.help or self.runqml)): # Extract and convert to unicode the arguments in the list. # The % operator replaces the list elements with repr() of # the list elements, which is OK for latin characters @@ -388,6 +394,9 @@ class ArgParser(object): #errors in argument parsing ==> give cli error, no gui needed return False + if len(self.removes) > 0: + return False + if self.list or self.list_more or self.list_table or self.help: return False diff --git a/gramps/cli/clidbman.py b/gramps/cli/clidbman.py index 88a1be2e5..56adaa33d 100644 --- a/gramps/cli/clidbman.py +++ b/gramps/cli/clidbman.py @@ -395,6 +395,9 @@ class CLIDbManager(object): file.close() if name == dbname: # currently exact match; could add re.match match_list.append(dirpath) + if len(match_list) == 0: + CLIDbManager.ERROR("Family tree not found", + "No matching family tree found: '%s'" % dbname) # now delete them: for directory in match_list: try: diff --git a/gramps/gen/const.py b/gramps/gen/const.py index c8e5fc3ca..2c8e62637 100644 --- a/gramps/gen/const.py +++ b/gramps/gen/const.py @@ -313,6 +313,7 @@ LONGOPTS = [ "sm-config-prefix=", "sm-disable", "sync", + "remove=", "usage", "version", "qml", @@ -320,7 +321,7 @@ LONGOPTS = [ "quiet", ] -SHORTOPTS = "O:C:i:e:f:a:p:d:c:lLthuv?syq" +SHORTOPTS = "O:C:i:e:f:a:p:d:c:r:lLthuv?syq" GRAMPS_UUID = uuid.UUID('516cd010-5a41-470f-99f8-eb22f1098ad6')