Fossil SCM

Disallow "fossil set" and "fossil unset" on an ambiguous prefix.

drh 2014-09-14 21:05 trunk merge
Commit 3b990b5203c7262f89580a2c41d57cc42ec71768
2 files changed +27 -5 +27 -5
+27 -5
--- src/db.c
+++ src/db.c
@@ -2500,17 +2500,39 @@
25002500
}
25012501
isManifest = fossil_strcmp(ctrlSettings[i].name, "manifest")==0;
25022502
if( isManifest && globalFlag ){
25032503
fossil_fatal("cannot set 'manifest' globally");
25042504
}
2505
- if( unsetFlag ){
2506
- db_unset(ctrlSettings[i].name, globalFlag);
2507
- }else if( g.argc==4 ){
2508
- db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
2505
+ if( unsetFlag || g.argc==4 ){
2506
+ if( ctrlSettings[i+1].name
2507
+ && strncmp(ctrlSettings[i+1].name, zName, n)==0
2508
+ && ctrlSettings[i].name[n]!=0
2509
+ ){
2510
+ fossil_print("ambiguous property prefix: %s\nMatching properties:\n",
2511
+ zName);
2512
+ while( ctrlSettings[i].name
2513
+ && strncmp(ctrlSettings[i].name, zName, n)==0
2514
+ ){
2515
+ fossil_print("%s\n", ctrlSettings[i].name);
2516
+ i++;
2517
+ }
2518
+ fossil_exit(1);
2519
+ }else{
2520
+ if( unsetFlag ){
2521
+ db_unset(ctrlSettings[i].name, globalFlag);
2522
+ }else{
2523
+ db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
2524
+ }
2525
+ }
25092526
}else{
25102527
isManifest = 0;
2511
- print_setting(&ctrlSettings[i], db_open_local(0));
2528
+ while( ctrlSettings[i].name
2529
+ && strncmp(ctrlSettings[i].name, zName, n)==0
2530
+ ){
2531
+ print_setting(&ctrlSettings[i], db_open_local(0));
2532
+ i++;
2533
+ }
25122534
}
25132535
if( isManifest && g.localOpen ){
25142536
manifest_to_disk(db_lget_int("checkout", 0));
25152537
}
25162538
}else{
25172539
--- src/db.c
+++ src/db.c
@@ -2500,17 +2500,39 @@
2500 }
2501 isManifest = fossil_strcmp(ctrlSettings[i].name, "manifest")==0;
2502 if( isManifest && globalFlag ){
2503 fossil_fatal("cannot set 'manifest' globally");
2504 }
2505 if( unsetFlag ){
2506 db_unset(ctrlSettings[i].name, globalFlag);
2507 }else if( g.argc==4 ){
2508 db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2509 }else{
2510 isManifest = 0;
2511 print_setting(&ctrlSettings[i], db_open_local(0));
 
 
 
 
 
2512 }
2513 if( isManifest && g.localOpen ){
2514 manifest_to_disk(db_lget_int("checkout", 0));
2515 }
2516 }else{
2517
--- src/db.c
+++ src/db.c
@@ -2500,17 +2500,39 @@
2500 }
2501 isManifest = fossil_strcmp(ctrlSettings[i].name, "manifest")==0;
2502 if( isManifest && globalFlag ){
2503 fossil_fatal("cannot set 'manifest' globally");
2504 }
2505 if( unsetFlag || g.argc==4 ){
2506 if( ctrlSettings[i+1].name
2507 && strncmp(ctrlSettings[i+1].name, zName, n)==0
2508 && ctrlSettings[i].name[n]!=0
2509 ){
2510 fossil_print("ambiguous property prefix: %s\nMatching properties:\n",
2511 zName);
2512 while( ctrlSettings[i].name
2513 && strncmp(ctrlSettings[i].name, zName, n)==0
2514 ){
2515 fossil_print("%s\n", ctrlSettings[i].name);
2516 i++;
2517 }
2518 fossil_exit(1);
2519 }else{
2520 if( unsetFlag ){
2521 db_unset(ctrlSettings[i].name, globalFlag);
2522 }else{
2523 db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
2524 }
2525 }
2526 }else{
2527 isManifest = 0;
2528 while( ctrlSettings[i].name
2529 && strncmp(ctrlSettings[i].name, zName, n)==0
2530 ){
2531 print_setting(&ctrlSettings[i], db_open_local(0));
2532 i++;
2533 }
2534 }
2535 if( isManifest && g.localOpen ){
2536 manifest_to_disk(db_lget_int("checkout", 0));
2537 }
2538 }else{
2539
+27 -5
--- src/db.c
+++ src/db.c
@@ -2500,17 +2500,39 @@
25002500
}
25012501
isManifest = fossil_strcmp(ctrlSettings[i].name, "manifest")==0;
25022502
if( isManifest && globalFlag ){
25032503
fossil_fatal("cannot set 'manifest' globally");
25042504
}
2505
- if( unsetFlag ){
2506
- db_unset(ctrlSettings[i].name, globalFlag);
2507
- }else if( g.argc==4 ){
2508
- db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
2505
+ if( unsetFlag || g.argc==4 ){
2506
+ if( ctrlSettings[i+1].name
2507
+ && strncmp(ctrlSettings[i+1].name, zName, n)==0
2508
+ && ctrlSettings[i].name[n]!=0
2509
+ ){
2510
+ fossil_print("ambiguous property prefix: %s\nMatching properties:\n",
2511
+ zName);
2512
+ while( ctrlSettings[i].name
2513
+ && strncmp(ctrlSettings[i].name, zName, n)==0
2514
+ ){
2515
+ fossil_print("%s\n", ctrlSettings[i].name);
2516
+ i++;
2517
+ }
2518
+ fossil_exit(1);
2519
+ }else{
2520
+ if( unsetFlag ){
2521
+ db_unset(ctrlSettings[i].name, globalFlag);
2522
+ }else{
2523
+ db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
2524
+ }
2525
+ }
25092526
}else{
25102527
isManifest = 0;
2511
- print_setting(&ctrlSettings[i], db_open_local(0));
2528
+ while( ctrlSettings[i].name
2529
+ && strncmp(ctrlSettings[i].name, zName, n)==0
2530
+ ){
2531
+ print_setting(&ctrlSettings[i], db_open_local(0));
2532
+ i++;
2533
+ }
25122534
}
25132535
if( isManifest && g.localOpen ){
25142536
manifest_to_disk(db_lget_int("checkout", 0));
25152537
}
25162538
}else{
25172539
--- src/db.c
+++ src/db.c
@@ -2500,17 +2500,39 @@
2500 }
2501 isManifest = fossil_strcmp(ctrlSettings[i].name, "manifest")==0;
2502 if( isManifest && globalFlag ){
2503 fossil_fatal("cannot set 'manifest' globally");
2504 }
2505 if( unsetFlag ){
2506 db_unset(ctrlSettings[i].name, globalFlag);
2507 }else if( g.argc==4 ){
2508 db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2509 }else{
2510 isManifest = 0;
2511 print_setting(&ctrlSettings[i], db_open_local(0));
 
 
 
 
 
2512 }
2513 if( isManifest && g.localOpen ){
2514 manifest_to_disk(db_lget_int("checkout", 0));
2515 }
2516 }else{
2517
--- src/db.c
+++ src/db.c
@@ -2500,17 +2500,39 @@
2500 }
2501 isManifest = fossil_strcmp(ctrlSettings[i].name, "manifest")==0;
2502 if( isManifest && globalFlag ){
2503 fossil_fatal("cannot set 'manifest' globally");
2504 }
2505 if( unsetFlag || g.argc==4 ){
2506 if( ctrlSettings[i+1].name
2507 && strncmp(ctrlSettings[i+1].name, zName, n)==0
2508 && ctrlSettings[i].name[n]!=0
2509 ){
2510 fossil_print("ambiguous property prefix: %s\nMatching properties:\n",
2511 zName);
2512 while( ctrlSettings[i].name
2513 && strncmp(ctrlSettings[i].name, zName, n)==0
2514 ){
2515 fossil_print("%s\n", ctrlSettings[i].name);
2516 i++;
2517 }
2518 fossil_exit(1);
2519 }else{
2520 if( unsetFlag ){
2521 db_unset(ctrlSettings[i].name, globalFlag);
2522 }else{
2523 db_set(ctrlSettings[i].name, g.argv[3], globalFlag);
2524 }
2525 }
2526 }else{
2527 isManifest = 0;
2528 while( ctrlSettings[i].name
2529 && strncmp(ctrlSettings[i].name, zName, n)==0
2530 ){
2531 print_setting(&ctrlSettings[i], db_open_local(0));
2532 i++;
2533 }
2534 }
2535 if( isManifest && g.localOpen ){
2536 manifest_to_disk(db_lget_int("checkout", 0));
2537 }
2538 }else{
2539

Keyboard Shortcuts

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