Fossil SCM

Add the "all rebuild" subcommand. Be more aggressive about adding repositories to the repository list.

drh 2008-10-17 12:31 trunk
Commit 2bd0690fe8d58ec4a0cbca48f76c1e1f6fc9e9d9
+22 -14
--- src/allrepo.c
+++ src/allrepo.c
@@ -62,17 +62,23 @@
6262
** The ~/.fossil file records the location of all repositories for a
6363
** user. This command performs certain operations on all repositories
6464
** that can be useful before or after a period of disconnection operation.
6565
** Available operations are:
6666
**
67
-** list Display the location of all repositories
67
+** list Display the location of all repositories
68
+**
69
+** pull Run a "pull" operation on all repositories
70
+**
71
+** push Run a "push" on all repositories
72
+**
73
+** rebuild Rebuild on all repositories
6874
**
69
-** pull Run a "pull" operation on all repositories
75
+** sync Run a "sync" on all repositories
7076
**
71
-** push Run a "push" on all repositories
72
-**
73
-** sync Run a "sync" on all repositories
77
+** Respositories are automatically added to the set of known repositories
78
+** when one of the following commands against the repository: clone, info,
79
+** pull, push, or sync
7480
*/
7581
void all_cmd(void){
7682
int n;
7783
Stmt q;
7884
const char *zCmd;
@@ -80,31 +86,33 @@
8086
char *zFossil;
8187
char *zQFilename;
8288
int nMissing;
8389
8490
if( g.argc<3 ){
85
- usage("list|pull|push|sync");
91
+ usage("list|pull|push|rebuild|sync");
8692
}
8793
n = strlen(g.argv[2]);
8894
db_open_config();
89
- db_prepare(&q, "SELECT substr(name, 6) FROM global_config"
90
- " WHERE substr(name, 1, 5)=='repo:' ORDER BY 1");
9195
zCmd = g.argv[2];
9296
if( strncmp(zCmd, "list", n)==0 ){
9397
zCmd = "list";
9498
}else if( strncmp(zCmd, "push", n)==0 ){
95
- zCmd = "push";
99
+ zCmd = "push -autourl -R";
96100
}else if( strncmp(zCmd, "pull", n)==0 ){
97
- zCmd = "pull";
101
+ zCmd = "pull -autourl -R";
102
+ }else if( strncmp(zCmd, "rebuild", n)==0 ){
103
+ zCmd = "rebuild";
98104
}else if( strncmp(zCmd, "sync", n)==0 ){
99
- zCmd = "sync";
105
+ zCmd = "sync -autourl -R";
100106
}else{
101107
fossil_fatal("\"all\" subcommand should be one of: "
102108
"list push pull sync");
103109
}
104110
zFossil = quoteFilename(g.argv[0]);
105111
nMissing = 0;
112
+ db_prepare(&q, "SELECT substr(name, 6) FROM global_config"
113
+ " WHERE substr(name, 1, 5)=='repo:' ORDER BY 1");
106114
while( db_step(&q)==SQLITE_ROW ){
107115
const char *zFilename = db_column_text(&q, 0);
108116
if( access(zFilename, 0) ){
109117
nMissing++;
110118
continue;
@@ -112,12 +120,11 @@
112120
if( zCmd[0]=='l' ){
113121
printf("%s\n", zFilename);
114122
continue;
115123
}
116124
zQFilename = quoteFilename(zFilename);
117
- zSyscmd = mprintf("%s %s -R %s -autourl",
118
- zFossil, zCmd, zQFilename);
125
+ zSyscmd = mprintf("%s %s %s", zFossil, zCmd, zQFilename);
119126
printf("%s\n", zSyscmd);
120127
fflush(stdout);
121128
system(zSyscmd);
122129
free(zSyscmd);
123130
free(zQFilename);
@@ -135,9 +142,10 @@
135142
char *zRepo = mprintf("repo:%s", zFilename);
136143
db_unset(zRepo, 1);
137144
free(zRepo);
138145
}
139146
}
140
- db_finalize(&q);
147
+ db_reset(&q);
141148
db_end_transaction(0);
142149
}
150
+ db_finalize(&q);
143151
}
144152
--- src/allrepo.c
+++ src/allrepo.c
@@ -62,17 +62,23 @@
62 ** The ~/.fossil file records the location of all repositories for a
63 ** user. This command performs certain operations on all repositories
64 ** that can be useful before or after a period of disconnection operation.
65 ** Available operations are:
66 **
67 ** list Display the location of all repositories
 
 
 
 
 
 
68 **
69 ** pull Run a "pull" operation on all repositories
70 **
71 ** push Run a "push" on all repositories
72 **
73 ** sync Run a "sync" on all repositories
74 */
75 void all_cmd(void){
76 int n;
77 Stmt q;
78 const char *zCmd;
@@ -80,31 +86,33 @@
80 char *zFossil;
81 char *zQFilename;
82 int nMissing;
83
84 if( g.argc<3 ){
85 usage("list|pull|push|sync");
86 }
87 n = strlen(g.argv[2]);
88 db_open_config();
89 db_prepare(&q, "SELECT substr(name, 6) FROM global_config"
90 " WHERE substr(name, 1, 5)=='repo:' ORDER BY 1");
91 zCmd = g.argv[2];
92 if( strncmp(zCmd, "list", n)==0 ){
93 zCmd = "list";
94 }else if( strncmp(zCmd, "push", n)==0 ){
95 zCmd = "push";
96 }else if( strncmp(zCmd, "pull", n)==0 ){
97 zCmd = "pull";
 
 
98 }else if( strncmp(zCmd, "sync", n)==0 ){
99 zCmd = "sync";
100 }else{
101 fossil_fatal("\"all\" subcommand should be one of: "
102 "list push pull sync");
103 }
104 zFossil = quoteFilename(g.argv[0]);
105 nMissing = 0;
 
 
106 while( db_step(&q)==SQLITE_ROW ){
107 const char *zFilename = db_column_text(&q, 0);
108 if( access(zFilename, 0) ){
109 nMissing++;
110 continue;
@@ -112,12 +120,11 @@
112 if( zCmd[0]=='l' ){
113 printf("%s\n", zFilename);
114 continue;
115 }
116 zQFilename = quoteFilename(zFilename);
117 zSyscmd = mprintf("%s %s -R %s -autourl",
118 zFossil, zCmd, zQFilename);
119 printf("%s\n", zSyscmd);
120 fflush(stdout);
121 system(zSyscmd);
122 free(zSyscmd);
123 free(zQFilename);
@@ -135,9 +142,10 @@
135 char *zRepo = mprintf("repo:%s", zFilename);
136 db_unset(zRepo, 1);
137 free(zRepo);
138 }
139 }
140 db_finalize(&q);
141 db_end_transaction(0);
142 }
 
143 }
144
--- src/allrepo.c
+++ src/allrepo.c
@@ -62,17 +62,23 @@
62 ** The ~/.fossil file records the location of all repositories for a
63 ** user. This command performs certain operations on all repositories
64 ** that can be useful before or after a period of disconnection operation.
65 ** Available operations are:
66 **
67 ** list Display the location of all repositories
68 **
69 ** pull Run a "pull" operation on all repositories
70 **
71 ** push Run a "push" on all repositories
72 **
73 ** rebuild Rebuild on all repositories
74 **
75 ** sync Run a "sync" on all repositories
76 **
77 ** Respositories are automatically added to the set of known repositories
78 ** when one of the following commands against the repository: clone, info,
79 ** pull, push, or sync
80 */
81 void all_cmd(void){
82 int n;
83 Stmt q;
84 const char *zCmd;
@@ -80,31 +86,33 @@
86 char *zFossil;
87 char *zQFilename;
88 int nMissing;
89
90 if( g.argc<3 ){
91 usage("list|pull|push|rebuild|sync");
92 }
93 n = strlen(g.argv[2]);
94 db_open_config();
 
 
95 zCmd = g.argv[2];
96 if( strncmp(zCmd, "list", n)==0 ){
97 zCmd = "list";
98 }else if( strncmp(zCmd, "push", n)==0 ){
99 zCmd = "push -autourl -R";
100 }else if( strncmp(zCmd, "pull", n)==0 ){
101 zCmd = "pull -autourl -R";
102 }else if( strncmp(zCmd, "rebuild", n)==0 ){
103 zCmd = "rebuild";
104 }else if( strncmp(zCmd, "sync", n)==0 ){
105 zCmd = "sync -autourl -R";
106 }else{
107 fossil_fatal("\"all\" subcommand should be one of: "
108 "list push pull sync");
109 }
110 zFossil = quoteFilename(g.argv[0]);
111 nMissing = 0;
112 db_prepare(&q, "SELECT substr(name, 6) FROM global_config"
113 " WHERE substr(name, 1, 5)=='repo:' ORDER BY 1");
114 while( db_step(&q)==SQLITE_ROW ){
115 const char *zFilename = db_column_text(&q, 0);
116 if( access(zFilename, 0) ){
117 nMissing++;
118 continue;
@@ -112,12 +120,11 @@
120 if( zCmd[0]=='l' ){
121 printf("%s\n", zFilename);
122 continue;
123 }
124 zQFilename = quoteFilename(zFilename);
125 zSyscmd = mprintf("%s %s %s", zFossil, zCmd, zQFilename);
 
126 printf("%s\n", zSyscmd);
127 fflush(stdout);
128 system(zSyscmd);
129 free(zSyscmd);
130 free(zQFilename);
@@ -135,9 +142,10 @@
142 char *zRepo = mprintf("repo:%s", zFilename);
143 db_unset(zRepo, 1);
144 free(zRepo);
145 }
146 }
147 db_reset(&q);
148 db_end_transaction(0);
149 }
150 db_finalize(&q);
151 }
152
--- src/clone.c
+++ src/clone.c
@@ -49,19 +49,21 @@
4949
url_parse(g.argv[2]);
5050
if( g.urlIsFile ){
5151
file_copy(g.urlName, g.argv[3]);
5252
db_close();
5353
db_open_repository(g.argv[3]);
54
+ db_record_repository_filename(g.argv[3]);
5455
db_multi_exec(
5556
"REPLACE INTO config(name,value)"
5657
" VALUES('server-code', lower(hex(randomblob(20))));"
5758
);
5859
printf("Repository cloned into %s\n", g.argv[3]);
5960
}else{
6061
db_create_repository(g.argv[3]);
6162
db_open_repository(g.argv[3]);
6263
db_begin_transaction();
64
+ db_record_repository_filename(g.argv[3]);
6365
db_initial_setup(0, 0);
6466
user_select();
6567
db_set("content-schema", CONTENT_SCHEMA, 0);
6668
db_set("aux-schema", AUX_SCHEMA, 0);
6769
db_set("last-sync-url", g.argv[2], 0);
6870
--- src/clone.c
+++ src/clone.c
@@ -49,19 +49,21 @@
49 url_parse(g.argv[2]);
50 if( g.urlIsFile ){
51 file_copy(g.urlName, g.argv[3]);
52 db_close();
53 db_open_repository(g.argv[3]);
 
54 db_multi_exec(
55 "REPLACE INTO config(name,value)"
56 " VALUES('server-code', lower(hex(randomblob(20))));"
57 );
58 printf("Repository cloned into %s\n", g.argv[3]);
59 }else{
60 db_create_repository(g.argv[3]);
61 db_open_repository(g.argv[3]);
62 db_begin_transaction();
 
63 db_initial_setup(0, 0);
64 user_select();
65 db_set("content-schema", CONTENT_SCHEMA, 0);
66 db_set("aux-schema", AUX_SCHEMA, 0);
67 db_set("last-sync-url", g.argv[2], 0);
68
--- src/clone.c
+++ src/clone.c
@@ -49,19 +49,21 @@
49 url_parse(g.argv[2]);
50 if( g.urlIsFile ){
51 file_copy(g.urlName, g.argv[3]);
52 db_close();
53 db_open_repository(g.argv[3]);
54 db_record_repository_filename(g.argv[3]);
55 db_multi_exec(
56 "REPLACE INTO config(name,value)"
57 " VALUES('server-code', lower(hex(randomblob(20))));"
58 );
59 printf("Repository cloned into %s\n", g.argv[3]);
60 }else{
61 db_create_repository(g.argv[3]);
62 db_open_repository(g.argv[3]);
63 db_begin_transaction();
64 db_record_repository_filename(g.argv[3]);
65 db_initial_setup(0, 0);
66 user_select();
67 db_set("content-schema", CONTENT_SCHEMA, 0);
68 db_set("aux-schema", AUX_SCHEMA, 0);
69 db_set("last-sync-url", g.argv[2], 0);
70
+4 -1
--- src/db.c
+++ src/db.c
@@ -1129,19 +1129,22 @@
11291129
** repo:%s
11301130
**
11311131
** The value field is set to 1.
11321132
*/
11331133
void db_record_repository_filename(const char *zName){
1134
+ Blob full;
11341135
if( zName==0 ){
11351136
if( !g.localOpen ) return;
11361137
zName = db_lget("repository", 0);
11371138
}
1139
+ file_canonical_name(zName, &full);
11381140
db_multi_exec(
11391141
"INSERT OR IGNORE INTO global_config(name,value)"
11401142
"VALUES('repo:%q',1)",
1141
- zName
1143
+ blob_str(&full)
11421144
);
1145
+ blob_reset(&full);
11431146
}
11441147
11451148
/*
11461149
** COMMAND: open
11471150
**
11481151
--- src/db.c
+++ src/db.c
@@ -1129,19 +1129,22 @@
1129 ** repo:%s
1130 **
1131 ** The value field is set to 1.
1132 */
1133 void db_record_repository_filename(const char *zName){
 
1134 if( zName==0 ){
1135 if( !g.localOpen ) return;
1136 zName = db_lget("repository", 0);
1137 }
 
1138 db_multi_exec(
1139 "INSERT OR IGNORE INTO global_config(name,value)"
1140 "VALUES('repo:%q',1)",
1141 zName
1142 );
 
1143 }
1144
1145 /*
1146 ** COMMAND: open
1147 **
1148
--- src/db.c
+++ src/db.c
@@ -1129,19 +1129,22 @@
1129 ** repo:%s
1130 **
1131 ** The value field is set to 1.
1132 */
1133 void db_record_repository_filename(const char *zName){
1134 Blob full;
1135 if( zName==0 ){
1136 if( !g.localOpen ) return;
1137 zName = db_lget("repository", 0);
1138 }
1139 file_canonical_name(zName, &full);
1140 db_multi_exec(
1141 "INSERT OR IGNORE INTO global_config(name,value)"
1142 "VALUES('repo:%q',1)",
1143 blob_str(&full)
1144 );
1145 blob_reset(&full);
1146 }
1147
1148 /*
1149 ** COMMAND: open
1150 **
1151
+1
--- src/info.c
+++ src/info.c
@@ -86,10 +86,11 @@
8686
}
8787
db_must_be_within_tree();
8888
if( g.argc==2 ){
8989
int vid;
9090
/* 012345678901234 */
91
+ db_record_repository_filename(0);
9192
printf("repository: %s\n", db_lget("repository", ""));
9293
printf("local-root: %s\n", g.zLocalRoot);
9394
printf("project-code: %s\n", db_get("project-code", ""));
9495
printf("server-code: %s\n", db_get("server-code", ""));
9596
vid = db_lget_int("checkout", 0);
9697
--- src/info.c
+++ src/info.c
@@ -86,10 +86,11 @@
86 }
87 db_must_be_within_tree();
88 if( g.argc==2 ){
89 int vid;
90 /* 012345678901234 */
 
91 printf("repository: %s\n", db_lget("repository", ""));
92 printf("local-root: %s\n", g.zLocalRoot);
93 printf("project-code: %s\n", db_get("project-code", ""));
94 printf("server-code: %s\n", db_get("server-code", ""));
95 vid = db_lget_int("checkout", 0);
96
--- src/info.c
+++ src/info.c
@@ -86,10 +86,11 @@
86 }
87 db_must_be_within_tree();
88 if( g.argc==2 ){
89 int vid;
90 /* 012345678901234 */
91 db_record_repository_filename(0);
92 printf("repository: %s\n", db_lget("repository", ""));
93 printf("local-root: %s\n", g.zLocalRoot);
94 printf("project-code: %s\n", db_get("project-code", ""));
95 printf("server-code: %s\n", db_get("server-code", ""));
96 vid = db_lget_int("checkout", 0);
97
+1 -3
--- src/xfer.c
+++ src/xfer.c
@@ -818,13 +818,11 @@
818818
819819
assert( pushFlag || pullFlag || cloneFlag || configMask );
820820
assert( !g.urlIsFile ); /* This only works for networking */
821821
822822
db_begin_transaction();
823
- if( pullFlag || cloneFlag ){
824
- db_record_repository_filename(0);
825
- }
823
+ db_record_repository_filename(0);
826824
db_multi_exec(
827825
"CREATE TEMP TABLE onremote(rid INTEGER PRIMARY KEY);"
828826
);
829827
blobarray_zero(xfer.aToken, count(xfer.aToken));
830828
blob_zero(&send);
831829
--- src/xfer.c
+++ src/xfer.c
@@ -818,13 +818,11 @@
818
819 assert( pushFlag || pullFlag || cloneFlag || configMask );
820 assert( !g.urlIsFile ); /* This only works for networking */
821
822 db_begin_transaction();
823 if( pullFlag || cloneFlag ){
824 db_record_repository_filename(0);
825 }
826 db_multi_exec(
827 "CREATE TEMP TABLE onremote(rid INTEGER PRIMARY KEY);"
828 );
829 blobarray_zero(xfer.aToken, count(xfer.aToken));
830 blob_zero(&send);
831
--- src/xfer.c
+++ src/xfer.c
@@ -818,13 +818,11 @@
818
819 assert( pushFlag || pullFlag || cloneFlag || configMask );
820 assert( !g.urlIsFile ); /* This only works for networking */
821
822 db_begin_transaction();
823 db_record_repository_filename(0);
 
 
824 db_multi_exec(
825 "CREATE TEMP TABLE onremote(rid INTEGER PRIMARY KEY);"
826 );
827 blobarray_zero(xfer.aToken, count(xfer.aToken));
828 blob_zero(&send);
829

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button