浏览代码

allow forcing init in dirty directory

Nick Sweeting 6 年之前
父节点
当前提交
ad3898add6
共有 2 个文件被更改,包括 24 次插入12 次删除
  1. 10 2
      archivebox/cli/archivebox_init.py
  2. 14 10
      archivebox/main.py

+ 10 - 2
archivebox/cli/archivebox_init.py

@@ -21,10 +21,18 @@ def main(args: Optional[List[str]]=None, stdin: Optional[IO]=None, pwd: Optional
         add_help=True,
         formatter_class=SmartFormatter,
     )
-    parser.parse_args(args or ())
+    parser.add_argument(
+        '--force', # '-f',
+        action='store_true',
+        help='Ignore unrecognized files in current directory and initialize anyway',
+    )
+    command = parser.parse_args(args or ())
     reject_stdin(__command__, stdin)
 
-    init(out_dir=pwd or OUTPUT_DIR)
+    init(
+        force=command.force,
+        out_dir=pwd or OUTPUT_DIR,
+    )
     
 
 if __name__ == '__main__':

+ 14 - 10
archivebox/main.py

@@ -238,7 +238,7 @@ def run(subcommand: str,
 
 
 @enforce_types
-def init(out_dir: str=OUTPUT_DIR) -> None:
+def init(force: bool=False, out_dir: str=OUTPUT_DIR) -> None:
     """Initialize a new ArchiveBox collection in the current directory"""
     os.makedirs(out_dir, exist_ok=True)
 
@@ -254,15 +254,19 @@ def init(out_dir: str=OUTPUT_DIR) -> None:
         print(f'    {out_dir}')
         print('{green}------------------------------------------------------------------{reset}'.format(**ANSI))
     else:
-        stderr(
-            ("{red}[X] This folder appears to already have files in it, but no index.json is present.{reset}\n\n"
-            "    You must run init in a completely empty directory, or an existing data folder.\n\n"
-            "    {lightred}Hint:{reset} To import an existing data folder make sure to cd into the folder first, \n"
-            "    then run and run 'archivebox init' to pick up where you left off.\n\n"
-            "    (Always make sure your data folder is backed up first before updating ArchiveBox)"
-            ).format(out_dir, **ANSI)
-        )
-        raise SystemExit(1)
+        if force:
+            stderr('[!] This folder appears to already have files in it, but no index.json is present.', color='lightyellow')
+            stderr('    Because --force was passed, ArchiveBox will initialize anyway (which may overwrite existing files).')
+        else:
+            stderr(
+                ("{red}[X] This folder appears to already have files in it, but no index.json is present.{reset}\n\n"
+                "    You must run init in a completely empty directory, or an existing data folder.\n\n"
+                "    {lightred}Hint:{reset} To import an existing data folder make sure to cd into the folder first, \n"
+                "    then run and run 'archivebox init' to pick up where you left off.\n\n"
+                "    (Always make sure your data folder is backed up first before updating ArchiveBox)"
+                ).format(out_dir, **ANSI)
+            )
+            raise SystemExit(2)
 
     if existing_index:
         print('\n{green}[*] Verifying archive folder structure...{reset}'.format(**ANSI))