Diff
Not logged in

Differences From:

File src/clone.c part of check-in [28e56282c9] - Finish implementing the configuration command by adding method implementations for "import", "reset", and "pull". by drh on 2008-05-23 19:21:03. [view]

To:

File src/clone.c part of check-in [9236f0c086] - Get cloning working for local files without the use of network I/O. Ticket b3482d580e. by drh on 2008-10-05 12:34:14. [view]

@@ -46,46 +46,40 @@
   if( file_size(g.argv[3])>0 ){
     fossil_panic("file already exists: %s", g.argv[3]);
   }
   url_parse(g.argv[2]);
-  db_create_repository(g.argv[3]);
-  db_open_repository(g.argv[3]);
-  db_begin_transaction();
-  db_initial_setup(0, 0);
-  user_select();
-  db_set("content-schema", CONTENT_SCHEMA, 0);
-  db_set("aux-schema", AUX_SCHEMA, 0);
-  if( !g.urlIsFile ){
-    db_set("last-sync-url", g.argv[2], 0);
-  }
-  db_multi_exec(
-    "INSERT INTO config(name,value)"
-    " VALUES('server-code', lower(hex(randomblob(20))));"
-  );
   if( g.urlIsFile ){
-    Stmt q;
-    db_multi_exec("ATTACH DATABASE %Q AS orig", g.urlName);
-    db_prepare(&q,
-      "SELECT name FROM orig.sqlite_master"
-      " WHERE type='table'"
+    file_copy(g.urlName, g.argv[3]);
+    db_close();
+    db_open_repository(g.argv[3]);
+    db_multi_exec(
+      "REPLACE INTO config(name,value)"
+      " VALUES('server-code', lower(hex(randomblob(20))));"
     );
-    while( db_step(&q)==SQLITE_ROW ){
-      const char *zTab = db_column_text(&q, 0);
-      db_multi_exec("INSERT OR IGNORE INTO %Q SELECT * FROM orig.%Q",
-                    zTab, zTab);
-    }
-    db_finalize(&q);
+    printf("Repository cloned into %s\n", g.argv[3]);
   }else{
+    db_create_repository(g.argv[3]);
+    db_open_repository(g.argv[3]);
+    db_begin_transaction();
+    db_initial_setup(0, 0);
+    user_select();
+    db_set("content-schema", CONTENT_SCHEMA, 0);
+    db_set("aux-schema", AUX_SCHEMA, 0);
+    db_set("last-sync-url", g.argv[2], 0);
+    db_multi_exec(
+      "REPLACE INTO config(name,value)"
+      " VALUES('server-code', lower(hex(randomblob(20))));"
+    );
     url_enable_proxy(0);
     g.xlinkClusterOnly = 1;
     client_sync(0,0,1,CONFIGSET_ALL);
     g.xlinkClusterOnly = 0;
-  }
-  verify_cancel();
-  db_end_transaction(0);
-  db_close();
-  db_open_repository(g.argv[3]);
+    verify_cancel();
+    db_end_transaction(0);
+    db_close();
+    db_open_repository(g.argv[3]);
+  }
   db_begin_transaction();
   printf("Rebuilding repository meta-data...\n");
   rebuild_db(0, 1);
   db_end_transaction(0);
 }