Fossil SCM

Add additional trace output with the --debug option on "fossil merge" and especially on filename change tracking.

drh 2011-09-02 13:51 trunk
Commit 21acce3c350f582ff9bde95b0784d6be4c641780
3 files changed +17 -4 +50 -27 +1 -1
+17 -4
--- src/merge.c
+++ src/merge.c
@@ -148,10 +148,19 @@
148148
vfile_check_signature(vid, 1, 0);
149149
db_begin_transaction();
150150
if( !nochangeFlag ) undo_begin();
151151
load_vfile_from_rid(mid);
152152
load_vfile_from_rid(pid);
153
+ if( debugFlag ){
154
+ char *z;
155
+ z = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", pid);
156
+ fossil_print("P=%d %z\n", pid, z);
157
+ z = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", mid);
158
+ fossil_print("M=%d %z\n", mid, z);
159
+ z = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid);
160
+ fossil_print("V=%d %z\n", vid, z);
161
+ }
153162
154163
/*
155164
** The vfile.pathname field is used to match files against each other. The
156165
** FV table contains one row for each each unique filename in
157166
** in the current checkout, the pivot, and the version being merged.
@@ -187,11 +196,11 @@
187196
);
188197
189198
/*
190199
** Compute name changes from P->V
191200
*/
192
- find_filename_changes(vid, pid, &nChng, &aChng);
201
+ find_filename_changes(vid, pid, &nChng, &aChng, debugFlag ? "P->V" : 0);
193202
if( nChng ){
194203
for(i=0; i<nChng; i++){
195204
char *z;
196205
z = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
197206
db_multi_exec(
@@ -217,11 +226,11 @@
217226
);
218227
219228
/*
220229
** Compute name changes from P->M
221230
*/
222
- find_filename_changes(pid, mid, &nChng, &aChng);
231
+ find_filename_changes(pid, mid, &nChng, &aChng, debugFlag ? "P->M" : 0);
223232
if( nChng ){
224233
if( nChng>4 ) db_multi_exec("CREATE INDEX fv_fnp ON fv(fnp)");
225234
for(i=0; i<nChng; i++){
226235
db_multi_exec(
227236
"UPDATE fv SET fnm=(SELECT name FROM filename WHERE fnid=%d)"
@@ -250,12 +259,16 @@
250259
db_multi_exec(
251260
"UPDATE fv SET"
252261
" idp=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnp),0),"
253262
" ridp=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnp),0),"
254263
" idm=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnm),0),"
255
- " ridm=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnm),0)",
256
- pid, pid, mid, mid
264
+ " ridm=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnm),0),"
265
+ " islinkv=coalesce((SELECT islink FROM vfile"
266
+ " WHERE vid=%d AND pathname=fnm),0),"
267
+ " islinkm=coalesce((SELECT islink FROM vfile"
268
+ " WHERE vid=%d AND pathname=fnm),0)",
269
+ pid, pid, mid, mid, vid, mid
257270
);
258271
259272
/*
260273
** Add islink information for files in V and M
261274
**
262275
--- src/merge.c
+++ src/merge.c
@@ -148,10 +148,19 @@
148 vfile_check_signature(vid, 1, 0);
149 db_begin_transaction();
150 if( !nochangeFlag ) undo_begin();
151 load_vfile_from_rid(mid);
152 load_vfile_from_rid(pid);
 
 
 
 
 
 
 
 
 
153
154 /*
155 ** The vfile.pathname field is used to match files against each other. The
156 ** FV table contains one row for each each unique filename in
157 ** in the current checkout, the pivot, and the version being merged.
@@ -187,11 +196,11 @@
187 );
188
189 /*
190 ** Compute name changes from P->V
191 */
192 find_filename_changes(vid, pid, &nChng, &aChng);
193 if( nChng ){
194 for(i=0; i<nChng; i++){
195 char *z;
196 z = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
197 db_multi_exec(
@@ -217,11 +226,11 @@
217 );
218
219 /*
220 ** Compute name changes from P->M
221 */
222 find_filename_changes(pid, mid, &nChng, &aChng);
223 if( nChng ){
224 if( nChng>4 ) db_multi_exec("CREATE INDEX fv_fnp ON fv(fnp)");
225 for(i=0; i<nChng; i++){
226 db_multi_exec(
227 "UPDATE fv SET fnm=(SELECT name FROM filename WHERE fnid=%d)"
@@ -250,12 +259,16 @@
250 db_multi_exec(
251 "UPDATE fv SET"
252 " idp=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnp),0),"
253 " ridp=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnp),0),"
254 " idm=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnm),0),"
255 " ridm=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnm),0)",
256 pid, pid, mid, mid
 
 
 
 
257 );
258
259 /*
260 ** Add islink information for files in V and M
261 **
262
--- src/merge.c
+++ src/merge.c
@@ -148,10 +148,19 @@
148 vfile_check_signature(vid, 1, 0);
149 db_begin_transaction();
150 if( !nochangeFlag ) undo_begin();
151 load_vfile_from_rid(mid);
152 load_vfile_from_rid(pid);
153 if( debugFlag ){
154 char *z;
155 z = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", pid);
156 fossil_print("P=%d %z\n", pid, z);
157 z = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", mid);
158 fossil_print("M=%d %z\n", mid, z);
159 z = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", vid);
160 fossil_print("V=%d %z\n", vid, z);
161 }
162
163 /*
164 ** The vfile.pathname field is used to match files against each other. The
165 ** FV table contains one row for each each unique filename in
166 ** in the current checkout, the pivot, and the version being merged.
@@ -187,11 +196,11 @@
196 );
197
198 /*
199 ** Compute name changes from P->V
200 */
201 find_filename_changes(vid, pid, &nChng, &aChng, debugFlag ? "P->V" : 0);
202 if( nChng ){
203 for(i=0; i<nChng; i++){
204 char *z;
205 z = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
206 db_multi_exec(
@@ -217,11 +226,11 @@
226 );
227
228 /*
229 ** Compute name changes from P->M
230 */
231 find_filename_changes(pid, mid, &nChng, &aChng, debugFlag ? "P->M" : 0);
232 if( nChng ){
233 if( nChng>4 ) db_multi_exec("CREATE INDEX fv_fnp ON fv(fnp)");
234 for(i=0; i<nChng; i++){
235 db_multi_exec(
236 "UPDATE fv SET fnm=(SELECT name FROM filename WHERE fnid=%d)"
@@ -250,12 +259,16 @@
259 db_multi_exec(
260 "UPDATE fv SET"
261 " idp=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnp),0),"
262 " ridp=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnp),0),"
263 " idm=coalesce((SELECT id FROM vfile WHERE vid=%d AND pathname=fnm),0),"
264 " ridm=coalesce((SELECT rid FROM vfile WHERE vid=%d AND pathname=fnm),0),"
265 " islinkv=coalesce((SELECT islink FROM vfile"
266 " WHERE vid=%d AND pathname=fnm),0),"
267 " islinkm=coalesce((SELECT islink FROM vfile"
268 " WHERE vid=%d AND pathname=fnm),0)",
269 pid, pid, mid, mid, vid, mid
270 );
271
272 /*
273 ** Add islink information for files in V and M
274 **
275
+50 -27
--- src/path.c
+++ src/path.c
@@ -89,14 +89,11 @@
8989
p = path.pAll;
9090
path.pAll = p->pAll;
9191
fossil_free(p);
9292
}
9393
bag_clear(&path.seen);
94
- path.pCurrent = 0;
95
- path.pAll = 0;
96
- path.pEnd = 0;
97
- path.nStep = 0;
94
+ memset(&path, 0, sizeof(&path));
9895
}
9996
10097
/*
10198
** Construct the path from path.pStart to path.pEnd in the u.pTo fields.
10299
*/
@@ -213,11 +210,11 @@
213210
z = db_text(0,
214211
"SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
215212
" FROM blob, event"
216213
" WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
217214
p->rid, p->rid);
218
- fossil_print("%4d: %s", n, z);
215
+ fossil_print("%4d: %5d %s", n, p->rid, z);
219216
fossil_free(z);
220217
if( p->u.pTo ){
221218
fossil_print(" is a %s of\n",
222219
p->u.pTo->fromIsParent ? "parent" : "child");
223220
}else{
@@ -313,11 +310,11 @@
313310
z = db_text(0,
314311
"SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
315312
" FROM blob, event"
316313
" WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
317314
p->rid, p->rid);
318
- fossil_print("%4d: %s", n, z);
315
+ fossil_print("%4d: %5d %s", n, p->rid, z);
319316
fossil_free(z);
320317
if( p->rid==iFrom ) fossil_print(" VERSION1");
321318
if( p->rid==iTo ) fossil_print(" VERSION2");
322319
if( p->rid==iPivot ) fossil_print(" PIVOT");
323320
fossil_print("\n");
@@ -340,25 +337,28 @@
340337
** Compute all file name changes that occur going from checkin iFrom
341338
** to checkin iTo.
342339
**
343340
** The number of name changes is written into *pnChng. For each name
344341
** change, two integers are allocated for *piChng. The first is the
345
-** filename.fnid for the original name and the second is for new name.
342
+** filename.fnid for the original name as seen in check-in iFrom and
343
+** the second is for new name as it is used in check-in iTo.
344
+**
346345
** Space to hold *piChng is obtained from fossil_malloc() and should
347346
** be released by the caller.
348347
**
349
-** This routine really has nothing to do with pathion. It is located
348
+** This routine really has nothing to do with path. It is located
350349
** in this path.c module in order to leverage some of the path
351350
** infrastructure.
352351
*/
353352
void find_filename_changes(
354
- int iFrom,
355
- int iTo,
356
- int *pnChng,
357
- int **aiChng
353
+ int iFrom, /* Ancestor check-in */
354
+ int iTo, /* Recent check-in */
355
+ int *pnChng, /* Number of name changes along the path */
356
+ int **aiChng, /* Name changes */
357
+ const char *zDebug /* Generate trace output if no NULL */
358358
){
359
- PathNode *p; /* For looping over path from iFrom to iTo */
359
+ PathNode *p; /* For looping over path from iFrom to iTo */
360360
NameChange *pAll = 0; /* List of all name changes seen so far */
361361
NameChange *pChng; /* For looping through the name change list */
362362
int nChng = 0; /* Number of files whose names have changed */
363363
int *aChng; /* Two integers per name change */
364364
int i; /* Loop counter */
@@ -387,10 +387,19 @@
387387
pfnid = db_column_int(&q1, 0);
388388
}else{
389389
fnid = db_column_int(&q1, 0);
390390
pfnid = db_column_int(&q1, 1);
391391
}
392
+ if( zDebug ){
393
+ fossil_print("%s at %d %.10z: %d[%z] -> %d[%z]\n",
394
+ zDebug, p->rid,
395
+ db_text(0, "SELECT uuid FROM blob WHERE rid=%d", p->rid),
396
+ pfnid,
397
+ db_text(0, "SELECT name FROM filename WHERE fnid=%d", pfnid),
398
+ fnid,
399
+ db_text(0, "SELECT name FROM filename WHERE fnid=%d", fnid));
400
+ }
392401
for(pChng=pAll; pChng; pChng=pChng->pNext){
393402
if( pChng->curName==pfnid ){
394403
pChng->newName = fnid;
395404
break;
396405
}
@@ -413,10 +422,18 @@
413422
*pnChng = nChng;
414423
aChng = *aiChng = fossil_malloc( nChng*2*sizeof(int) );
415424
for(pChng=pAll, i=0; pChng; pChng=pChng->pNext, i+=2){
416425
aChng[i] = pChng->origName;
417426
aChng[i+1] = pChng->newName;
427
+ if( zDebug ){
428
+ fossil_print("%s summary %d[%z] -> %d[%z]\n",
429
+ zDebug,
430
+ aChng[i],
431
+ db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i]),
432
+ aChng[i+1],
433
+ db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i+1]));
434
+ }
418435
}
419436
while( pAll ){
420437
pChng = pAll;
421438
pAll = pAll->pNext;
422439
fossil_free(pChng);
@@ -437,20 +454,26 @@
437454
int *aChng;
438455
int nChng;
439456
int i;
440457
441458
db_find_and_open_repository(0,0);
442
- if( g.argc!=4 ) usage("VERSION1 VERSION2");
443
- iFrom = name_to_rid(g.argv[2]);
444
- iTo = name_to_rid(g.argv[3]);
445
- find_filename_changes(iFrom, iTo, &nChng, &aChng);
446
- for(i=0; i<nChng; i++){
447
- char *zFrom, *zTo;
448
-
449
- zFrom = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2]);
450
- zTo = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
451
- fossil_print("[%s] -> [%s]\n", zFrom, zTo);
452
- fossil_free(zFrom);
453
- fossil_free(zTo);
454
- }
455
- fossil_free(aChng);
459
+ if( g.argc<4 ) usage("VERSION1 VERSION2");
460
+ while( g.argc>=4 ){
461
+ iFrom = name_to_rid(g.argv[2]);
462
+ iTo = name_to_rid(g.argv[3]);
463
+ find_filename_changes(iFrom, iTo, &nChng, &aChng, 0);
464
+ fossil_print("------ Changes for (%d) %s -> (%d) %s\n",
465
+ iFrom, g.argv[2], iTo, g.argv[3]);
466
+ for(i=0; i<nChng; i++){
467
+ char *zFrom, *zTo;
468
+
469
+ zFrom = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2]);
470
+ zTo = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
471
+ fossil_print("[%s] -> [%s]\n", zFrom, zTo);
472
+ fossil_free(zFrom);
473
+ fossil_free(zTo);
474
+ }
475
+ fossil_free(aChng);
476
+ g.argv += 2;
477
+ g.argc -= 2;
478
+ }
456479
}
457480
--- src/path.c
+++ src/path.c
@@ -89,14 +89,11 @@
89 p = path.pAll;
90 path.pAll = p->pAll;
91 fossil_free(p);
92 }
93 bag_clear(&path.seen);
94 path.pCurrent = 0;
95 path.pAll = 0;
96 path.pEnd = 0;
97 path.nStep = 0;
98 }
99
100 /*
101 ** Construct the path from path.pStart to path.pEnd in the u.pTo fields.
102 */
@@ -213,11 +210,11 @@
213 z = db_text(0,
214 "SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
215 " FROM blob, event"
216 " WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
217 p->rid, p->rid);
218 fossil_print("%4d: %s", n, z);
219 fossil_free(z);
220 if( p->u.pTo ){
221 fossil_print(" is a %s of\n",
222 p->u.pTo->fromIsParent ? "parent" : "child");
223 }else{
@@ -313,11 +310,11 @@
313 z = db_text(0,
314 "SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
315 " FROM blob, event"
316 " WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
317 p->rid, p->rid);
318 fossil_print("%4d: %s", n, z);
319 fossil_free(z);
320 if( p->rid==iFrom ) fossil_print(" VERSION1");
321 if( p->rid==iTo ) fossil_print(" VERSION2");
322 if( p->rid==iPivot ) fossil_print(" PIVOT");
323 fossil_print("\n");
@@ -340,25 +337,28 @@
340 ** Compute all file name changes that occur going from checkin iFrom
341 ** to checkin iTo.
342 **
343 ** The number of name changes is written into *pnChng. For each name
344 ** change, two integers are allocated for *piChng. The first is the
345 ** filename.fnid for the original name and the second is for new name.
 
 
346 ** Space to hold *piChng is obtained from fossil_malloc() and should
347 ** be released by the caller.
348 **
349 ** This routine really has nothing to do with pathion. It is located
350 ** in this path.c module in order to leverage some of the path
351 ** infrastructure.
352 */
353 void find_filename_changes(
354 int iFrom,
355 int iTo,
356 int *pnChng,
357 int **aiChng
 
358 ){
359 PathNode *p; /* For looping over path from iFrom to iTo */
360 NameChange *pAll = 0; /* List of all name changes seen so far */
361 NameChange *pChng; /* For looping through the name change list */
362 int nChng = 0; /* Number of files whose names have changed */
363 int *aChng; /* Two integers per name change */
364 int i; /* Loop counter */
@@ -387,10 +387,19 @@
387 pfnid = db_column_int(&q1, 0);
388 }else{
389 fnid = db_column_int(&q1, 0);
390 pfnid = db_column_int(&q1, 1);
391 }
 
 
 
 
 
 
 
 
 
392 for(pChng=pAll; pChng; pChng=pChng->pNext){
393 if( pChng->curName==pfnid ){
394 pChng->newName = fnid;
395 break;
396 }
@@ -413,10 +422,18 @@
413 *pnChng = nChng;
414 aChng = *aiChng = fossil_malloc( nChng*2*sizeof(int) );
415 for(pChng=pAll, i=0; pChng; pChng=pChng->pNext, i+=2){
416 aChng[i] = pChng->origName;
417 aChng[i+1] = pChng->newName;
 
 
 
 
 
 
 
 
418 }
419 while( pAll ){
420 pChng = pAll;
421 pAll = pAll->pNext;
422 fossil_free(pChng);
@@ -437,20 +454,26 @@
437 int *aChng;
438 int nChng;
439 int i;
440
441 db_find_and_open_repository(0,0);
442 if( g.argc!=4 ) usage("VERSION1 VERSION2");
443 iFrom = name_to_rid(g.argv[2]);
444 iTo = name_to_rid(g.argv[3]);
445 find_filename_changes(iFrom, iTo, &nChng, &aChng);
446 for(i=0; i<nChng; i++){
447 char *zFrom, *zTo;
448
449 zFrom = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2]);
450 zTo = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
451 fossil_print("[%s] -> [%s]\n", zFrom, zTo);
452 fossil_free(zFrom);
453 fossil_free(zTo);
454 }
455 fossil_free(aChng);
 
 
 
 
 
 
456 }
457
--- src/path.c
+++ src/path.c
@@ -89,14 +89,11 @@
89 p = path.pAll;
90 path.pAll = p->pAll;
91 fossil_free(p);
92 }
93 bag_clear(&path.seen);
94 memset(&path, 0, sizeof(&path));
 
 
 
95 }
96
97 /*
98 ** Construct the path from path.pStart to path.pEnd in the u.pTo fields.
99 */
@@ -213,11 +210,11 @@
210 z = db_text(0,
211 "SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
212 " FROM blob, event"
213 " WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
214 p->rid, p->rid);
215 fossil_print("%4d: %5d %s", n, p->rid, z);
216 fossil_free(z);
217 if( p->u.pTo ){
218 fossil_print(" is a %s of\n",
219 p->u.pTo->fromIsParent ? "parent" : "child");
220 }else{
@@ -313,11 +310,11 @@
310 z = db_text(0,
311 "SELECT substr(uuid,1,12) || ' ' || datetime(mtime)"
312 " FROM blob, event"
313 " WHERE blob.rid=%d AND event.objid=%d AND event.type='ci'",
314 p->rid, p->rid);
315 fossil_print("%4d: %5d %s", n, p->rid, z);
316 fossil_free(z);
317 if( p->rid==iFrom ) fossil_print(" VERSION1");
318 if( p->rid==iTo ) fossil_print(" VERSION2");
319 if( p->rid==iPivot ) fossil_print(" PIVOT");
320 fossil_print("\n");
@@ -340,25 +337,28 @@
337 ** Compute all file name changes that occur going from checkin iFrom
338 ** to checkin iTo.
339 **
340 ** The number of name changes is written into *pnChng. For each name
341 ** change, two integers are allocated for *piChng. The first is the
342 ** filename.fnid for the original name as seen in check-in iFrom and
343 ** the second is for new name as it is used in check-in iTo.
344 **
345 ** Space to hold *piChng is obtained from fossil_malloc() and should
346 ** be released by the caller.
347 **
348 ** This routine really has nothing to do with path. It is located
349 ** in this path.c module in order to leverage some of the path
350 ** infrastructure.
351 */
352 void find_filename_changes(
353 int iFrom, /* Ancestor check-in */
354 int iTo, /* Recent check-in */
355 int *pnChng, /* Number of name changes along the path */
356 int **aiChng, /* Name changes */
357 const char *zDebug /* Generate trace output if no NULL */
358 ){
359 PathNode *p; /* For looping over path from iFrom to iTo */
360 NameChange *pAll = 0; /* List of all name changes seen so far */
361 NameChange *pChng; /* For looping through the name change list */
362 int nChng = 0; /* Number of files whose names have changed */
363 int *aChng; /* Two integers per name change */
364 int i; /* Loop counter */
@@ -387,10 +387,19 @@
387 pfnid = db_column_int(&q1, 0);
388 }else{
389 fnid = db_column_int(&q1, 0);
390 pfnid = db_column_int(&q1, 1);
391 }
392 if( zDebug ){
393 fossil_print("%s at %d %.10z: %d[%z] -> %d[%z]\n",
394 zDebug, p->rid,
395 db_text(0, "SELECT uuid FROM blob WHERE rid=%d", p->rid),
396 pfnid,
397 db_text(0, "SELECT name FROM filename WHERE fnid=%d", pfnid),
398 fnid,
399 db_text(0, "SELECT name FROM filename WHERE fnid=%d", fnid));
400 }
401 for(pChng=pAll; pChng; pChng=pChng->pNext){
402 if( pChng->curName==pfnid ){
403 pChng->newName = fnid;
404 break;
405 }
@@ -413,10 +422,18 @@
422 *pnChng = nChng;
423 aChng = *aiChng = fossil_malloc( nChng*2*sizeof(int) );
424 for(pChng=pAll, i=0; pChng; pChng=pChng->pNext, i+=2){
425 aChng[i] = pChng->origName;
426 aChng[i+1] = pChng->newName;
427 if( zDebug ){
428 fossil_print("%s summary %d[%z] -> %d[%z]\n",
429 zDebug,
430 aChng[i],
431 db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i]),
432 aChng[i+1],
433 db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i+1]));
434 }
435 }
436 while( pAll ){
437 pChng = pAll;
438 pAll = pAll->pNext;
439 fossil_free(pChng);
@@ -437,20 +454,26 @@
454 int *aChng;
455 int nChng;
456 int i;
457
458 db_find_and_open_repository(0,0);
459 if( g.argc<4 ) usage("VERSION1 VERSION2");
460 while( g.argc>=4 ){
461 iFrom = name_to_rid(g.argv[2]);
462 iTo = name_to_rid(g.argv[3]);
463 find_filename_changes(iFrom, iTo, &nChng, &aChng, 0);
464 fossil_print("------ Changes for (%d) %s -> (%d) %s\n",
465 iFrom, g.argv[2], iTo, g.argv[3]);
466 for(i=0; i<nChng; i++){
467 char *zFrom, *zTo;
468
469 zFrom = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2]);
470 zTo = db_text(0, "SELECT name FROM filename WHERE fnid=%d", aChng[i*2+1]);
471 fossil_print("[%s] -> [%s]\n", zFrom, zTo);
472 fossil_free(zFrom);
473 fossil_free(zTo);
474 }
475 fossil_free(aChng);
476 g.argv += 2;
477 g.argc -= 2;
478 }
479 }
480
+1 -1
--- src/update.c
+++ src/update.c
@@ -223,11 +223,11 @@
223223
);
224224
225225
/* Compute file name changes on V->T. Record name changes in files that
226226
** have changed locally.
227227
*/
228
- find_filename_changes(vid, tid, &nChng, &aChng);
228
+ find_filename_changes(vid, tid, &nChng, &aChng, debugFlag ? "V->T": 0);
229229
if( nChng ){
230230
for(i=0; i<nChng; i++){
231231
db_multi_exec(
232232
"UPDATE fv"
233233
" SET fnt=(SELECT name FROM filename WHERE fnid=%d)"
234234
--- src/update.c
+++ src/update.c
@@ -223,11 +223,11 @@
223 );
224
225 /* Compute file name changes on V->T. Record name changes in files that
226 ** have changed locally.
227 */
228 find_filename_changes(vid, tid, &nChng, &aChng);
229 if( nChng ){
230 for(i=0; i<nChng; i++){
231 db_multi_exec(
232 "UPDATE fv"
233 " SET fnt=(SELECT name FROM filename WHERE fnid=%d)"
234
--- src/update.c
+++ src/update.c
@@ -223,11 +223,11 @@
223 );
224
225 /* Compute file name changes on V->T. Record name changes in files that
226 ** have changed locally.
227 */
228 find_filename_changes(vid, tid, &nChng, &aChng, debugFlag ? "V->T": 0);
229 if( nChng ){
230 for(i=0; i<nChng; i++){
231 db_multi_exec(
232 "UPDATE fv"
233 " SET fnt=(SELECT name FROM filename WHERE fnid=%d)"
234

Keyboard Shortcuts

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