Fossil SCM

Phase 4 refactoring broke some important requirements: 1) "fossil rebuild" should not run any hook script, nor should it read the hook script code from the database for each manifest it processes. 2) When handling tickets through the UI, the ticket hook should be processed once, just as if it came in through xfer. 3) (less important) Allow "http -asynchronious" to be shortened to "http -async" I apologize for having to revert part of the "Phase 4 refactoring" restoring this. Other than that, it looks good!

jan.nijtmans 2013-10-14 10:38 UTC tkt-change-hook
Commit b92e111a59cf8508060a179f91e1ccbd99cd9015
+2 -2
--- src/manifest.c
+++ src/manifest.c
@@ -1679,11 +1679,11 @@
16791679
fossil_error(1, "cannot fetch baseline manifest");
16801680
return 0;
16811681
}
16821682
db_begin_transaction();
16831683
if( p->type==CFTYPE_MANIFEST ){
1684
- zScript = xfer_commit_code();
1684
+ zScript = "xfer-commit-script";
16851685
zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
16861686
if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){
16871687
char *zCom;
16881688
for(i=0; i<p->nParent; i++){
16891689
int pid = uuid_to_rid(p->azParent[i], 1);
@@ -1877,11 +1877,11 @@
18771877
}
18781878
}
18791879
if( p->type==CFTYPE_TICKET ){
18801880
char *zTag;
18811881
1882
- zScript = xfer_ticket_code();
1882
+ zScript = "xfer-ticket-script";
18831883
zUuid = p->zTicketUuid;
18841884
assert( manifest_crosslink_busy==1 );
18851885
zTag = mprintf("tkt-%s", p->zTicketUuid);
18861886
tag_insert(zTag, 1, 0, rid, p->rDate, rid);
18871887
free(zTag);
18881888
--- src/manifest.c
+++ src/manifest.c
@@ -1679,11 +1679,11 @@
1679 fossil_error(1, "cannot fetch baseline manifest");
1680 return 0;
1681 }
1682 db_begin_transaction();
1683 if( p->type==CFTYPE_MANIFEST ){
1684 zScript = xfer_commit_code();
1685 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1686 if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){
1687 char *zCom;
1688 for(i=0; i<p->nParent; i++){
1689 int pid = uuid_to_rid(p->azParent[i], 1);
@@ -1877,11 +1877,11 @@
1877 }
1878 }
1879 if( p->type==CFTYPE_TICKET ){
1880 char *zTag;
1881
1882 zScript = xfer_ticket_code();
1883 zUuid = p->zTicketUuid;
1884 assert( manifest_crosslink_busy==1 );
1885 zTag = mprintf("tkt-%s", p->zTicketUuid);
1886 tag_insert(zTag, 1, 0, rid, p->rDate, rid);
1887 free(zTag);
1888
--- src/manifest.c
+++ src/manifest.c
@@ -1679,11 +1679,11 @@
1679 fossil_error(1, "cannot fetch baseline manifest");
1680 return 0;
1681 }
1682 db_begin_transaction();
1683 if( p->type==CFTYPE_MANIFEST ){
1684 zScript = "xfer-commit-script";
1685 zUuid = db_text(0, "SELECT uuid FROM blob WHERE rid=%d", rid);
1686 if( !db_exists("SELECT 1 FROM mlink WHERE mid=%d", rid) ){
1687 char *zCom;
1688 for(i=0; i<p->nParent; i++){
1689 int pid = uuid_to_rid(p->azParent[i], 1);
@@ -1877,11 +1877,11 @@
1877 }
1878 }
1879 if( p->type==CFTYPE_TICKET ){
1880 char *zTag;
1881
1882 zScript = "xfer-ticket-script";
1883 zUuid = p->zTicketUuid;
1884 assert( manifest_crosslink_busy==1 );
1885 zTag = mprintf("tkt-%s", p->zTicketUuid);
1886 tag_insert(zTag, 1, 0, rid, p->rDate, rid);
1887 free(zTag);
1888
+1 -1
--- src/th_main.c
+++ src/th_main.c
@@ -849,11 +849,11 @@
849849
const char *zSep, *zType, *zRegexp, *zParams;
850850
Blob hdr, payload;
851851
ReCompiled *pRe = 0;
852852
UrlData urlData;
853853
854
- if( argc>1 && fossil_strnicmp(argv[1], "-asynchronous\0", 14) ){
854
+ if( argc<2 || argl[1]<6 || fossil_strnicmp(argv[1], "-asynchronous", argl[1]) ){
855855
Th_ErrorMessage(interp,
856856
"synchronous http requests not yet implemented", 0, 0);
857857
return TH_ERROR;
858858
}
859859
--argc; ++argv; ++argl; /* advance to next argument */
860860
--- src/th_main.c
+++ src/th_main.c
@@ -849,11 +849,11 @@
849 const char *zSep, *zType, *zRegexp, *zParams;
850 Blob hdr, payload;
851 ReCompiled *pRe = 0;
852 UrlData urlData;
853
854 if( argc>1 && fossil_strnicmp(argv[1], "-asynchronous\0", 14) ){
855 Th_ErrorMessage(interp,
856 "synchronous http requests not yet implemented", 0, 0);
857 return TH_ERROR;
858 }
859 --argc; ++argv; ++argl; /* advance to next argument */
860
--- src/th_main.c
+++ src/th_main.c
@@ -849,11 +849,11 @@
849 const char *zSep, *zType, *zRegexp, *zParams;
850 Blob hdr, payload;
851 ReCompiled *pRe = 0;
852 UrlData urlData;
853
854 if( argc<2 || argl[1]<6 || fossil_strnicmp(argv[1], "-asynchronous", argl[1]) ){
855 Th_ErrorMessage(interp,
856 "synchronous http requests not yet implemented", 0, 0);
857 return TH_ERROR;
858 }
859 --argc; ++argv; ++argl; /* advance to next argument */
860
+1 -3
--- src/tkt.c
+++ src/tkt.c
@@ -684,11 +684,10 @@
684684
captcha_generate(0);
685685
@ </form>
686686
if( g.thTrace ) Th_Trace("END_TKTVIEW<br />\n", -1);
687687
style_footer();
688688
xfer_run_common_script();
689
- xfer_run_script(xfer_ticket_code(), zNewUuid);
690689
}
691690
692691
/*
693692
** WEBPAGE: tktedit
694693
** WEBPAGE: debug_tktedit
@@ -754,11 +753,10 @@
754753
captcha_generate(0);
755754
@ </form>
756755
if( g.thTrace ) Th_Trace("BEGIN_TKTEDIT<br />\n", -1);
757756
style_footer();
758757
xfer_run_common_script();
759
- xfer_run_script(xfer_ticket_code(), zName);
760758
}
761759
762760
/*
763761
** Check the ticket table schema in zSchema to see if it appears to
764762
** be well-formed. If everything is OK, return NULL. If something is
@@ -1350,14 +1348,14 @@
13501348
}
13511349
blob_appendf(&tktchng, "K %s\n", zTktUuid);
13521350
blob_appendf(&tktchng, "U %F\n", zUser);
13531351
md5sum_blob(&tktchng, &cksum);
13541352
blob_appendf(&tktchng, "Z %b\n", &cksum);
1355
- if( ticket_put(&tktchng, zTktUuid, 0) ){
1353
+ if( xfer_run_common_script() || ticket_put(&tktchng, zTktUuid, 0) ){
13561354
fossil_fatal("%s\n", g.zErrMsg);
13571355
}else{
13581356
fossil_print("ticket %s succeeded for %s\n",
13591357
(eCmd==set?"set":"add"),zTktUuid);
13601358
}
13611359
}
13621360
}
13631361
}
13641362
--- src/tkt.c
+++ src/tkt.c
@@ -684,11 +684,10 @@
684 captcha_generate(0);
685 @ </form>
686 if( g.thTrace ) Th_Trace("END_TKTVIEW<br />\n", -1);
687 style_footer();
688 xfer_run_common_script();
689 xfer_run_script(xfer_ticket_code(), zNewUuid);
690 }
691
692 /*
693 ** WEBPAGE: tktedit
694 ** WEBPAGE: debug_tktedit
@@ -754,11 +753,10 @@
754 captcha_generate(0);
755 @ </form>
756 if( g.thTrace ) Th_Trace("BEGIN_TKTEDIT<br />\n", -1);
757 style_footer();
758 xfer_run_common_script();
759 xfer_run_script(xfer_ticket_code(), zName);
760 }
761
762 /*
763 ** Check the ticket table schema in zSchema to see if it appears to
764 ** be well-formed. If everything is OK, return NULL. If something is
@@ -1350,14 +1348,14 @@
1350 }
1351 blob_appendf(&tktchng, "K %s\n", zTktUuid);
1352 blob_appendf(&tktchng, "U %F\n", zUser);
1353 md5sum_blob(&tktchng, &cksum);
1354 blob_appendf(&tktchng, "Z %b\n", &cksum);
1355 if( ticket_put(&tktchng, zTktUuid, 0) ){
1356 fossil_fatal("%s\n", g.zErrMsg);
1357 }else{
1358 fossil_print("ticket %s succeeded for %s\n",
1359 (eCmd==set?"set":"add"),zTktUuid);
1360 }
1361 }
1362 }
1363 }
1364
--- src/tkt.c
+++ src/tkt.c
@@ -684,11 +684,10 @@
684 captcha_generate(0);
685 @ </form>
686 if( g.thTrace ) Th_Trace("END_TKTVIEW<br />\n", -1);
687 style_footer();
688 xfer_run_common_script();
 
689 }
690
691 /*
692 ** WEBPAGE: tktedit
693 ** WEBPAGE: debug_tktedit
@@ -754,11 +753,10 @@
753 captcha_generate(0);
754 @ </form>
755 if( g.thTrace ) Th_Trace("BEGIN_TKTEDIT<br />\n", -1);
756 style_footer();
757 xfer_run_common_script();
 
758 }
759
760 /*
761 ** Check the ticket table schema in zSchema to see if it appears to
762 ** be well-formed. If everything is OK, return NULL. If something is
@@ -1350,14 +1348,14 @@
1348 }
1349 blob_appendf(&tktchng, "K %s\n", zTktUuid);
1350 blob_appendf(&tktchng, "U %F\n", zUser);
1351 md5sum_blob(&tktchng, &cksum);
1352 blob_appendf(&tktchng, "Z %b\n", &cksum);
1353 if( xfer_run_common_script() || ticket_put(&tktchng, zTktUuid, 0) ){
1354 fossil_fatal("%s\n", g.zErrMsg);
1355 }else{
1356 fossil_print("ticket %s succeeded for %s\n",
1357 (eCmd==set?"set":"add"),zTktUuid);
1358 }
1359 }
1360 }
1361 }
1362
+29 -42
--- src/xfer.c
+++ src/xfer.c
@@ -819,54 +819,32 @@
819819
*/
820820
static void server_private_xfer_not_authorized(void){
821821
@ error not\sauthorized\sto\ssync\sprivate\scontent
822822
}
823823
824
-/*
825
-** Return the common TH1 code to evaluate prior to evaluating any other
826
-** TH1 transfer notification scripts.
827
-*/
828
-const char *xfer_common_code(void){
829
- return db_get("xfer-common-script", 0);
830
-}
831
-
832
-/*
833
-** Return the TH1 code to evaluate when a push is processed.
834
-*/
835
-const char *xfer_push_code(void){
836
- return db_get("xfer-push-script", 0);
837
-}
838
-
839
-/*
840
-** Return the TH1 code to evaluate when a commit is processed.
841
-*/
842
-const char *xfer_commit_code(void){
843
- return db_get("xfer-commit-script", 0);
844
-}
845
-
846
-/*
847
-** Return the TH1 code to evaluate when a ticket change is processed.
848
-*/
849
-const char *xfer_ticket_code(void){
850
- return db_get("xfer-ticket-script", 0);
851
-}
824
+static int commonScriptRan = 0;
852825
853826
/*
854827
** Run the specified TH1 script, if any, and returns 1 on error.
855828
*/
856829
int xfer_run_script(const char *zScript, const char *zUuid){
857
- int result;
858
- if( !zScript ) return TH_OK;
859
- Th_FossilInit(TH_INIT_DEFAULT);
860
- if( zUuid ){
861
- result = Th_SetVar(g.interp, "uuid", -1, zUuid, -1);
862
- if( result!=TH_OK ){
863
- fossil_error(1, "%s", Th_GetResult(g.interp, 0));
864
- return result;
865
- }
866
- }
867
- result = Th_Eval(g.interp, 0, zScript, -1);
830
+ int result = 0;
831
+ if( !commonScriptRan || !zScript || !(zScript = db_get(zScript, 0))){
832
+ return 0; /* No script or common script didn't run, return success. */
833
+ }
834
+ if( commonScriptRan == 1 ){
835
+ if( zUuid ){
836
+ result = Th_SetVar(g.interp, "uuid", -1, zUuid, -1);
837
+ if( result!=TH_OK ){
838
+ fossil_error(1, "%s", Th_GetResult(g.interp, 0));
839
+ return result;
840
+ }
841
+ }
842
+ result = Th_Eval(g.interp, 0, zScript, -1) != TH_OK;
843
+ }else{
844
+ result = TH_ERROR;
845
+ }
868846
if( result!=TH_OK ){
869847
fossil_error(1, "%s", Th_GetResult(g.interp, 0));
870848
}
871849
return result;
872850
}
@@ -873,12 +851,21 @@
873851
874852
/*
875853
** Runs the pre-transfer TH1 script, if any, and returns its return code.
876854
*/
877855
int xfer_run_common_script(void){
878
- Th_FossilInit(TH_INIT_DEFAULT);
879
- return xfer_run_script(xfer_common_code(), 0);
856
+ int result = 0;
857
+ if( !commonScriptRan ){
858
+ Th_FossilInit(TH_INIT_DEFAULT); /* Make sure TH1 is ready. */
859
+ commonScriptRan = 1; /* enable run_script to do something */
860
+ result = xfer_run_script("xfer-common-script", 0);
861
+ if( result == TH_ERROR ){
862
+ /* Error message is left in th interpreter. */
863
+ commonScriptRan = 2;
864
+ }
865
+ }
866
+ return result;
880867
}
881868
882869
/*
883870
** If this variable is set, disable login checks. Used for debugging
884871
** only.
@@ -1263,11 +1250,11 @@
12631250
}
12641251
blobarray_reset(xfer.aToken, xfer.nToken);
12651252
blob_reset(&xfer.line);
12661253
}
12671254
if( isPush ){
1268
- if( xfer_run_script(xfer_push_code(), 0)!=TH_OK ){
1255
+ if( xfer_run_script("xfer-push-script", 0)!=TH_OK ){
12691256
cgi_reset_content();
12701257
@ error push\sscript\sfailed:\s%F(g.zErrMsg)
12711258
nErr++;
12721259
}
12731260
request_phantoms(&xfer, 500);
12741261
--- src/xfer.c
+++ src/xfer.c
@@ -819,54 +819,32 @@
819 */
820 static void server_private_xfer_not_authorized(void){
821 @ error not\sauthorized\sto\ssync\sprivate\scontent
822 }
823
824 /*
825 ** Return the common TH1 code to evaluate prior to evaluating any other
826 ** TH1 transfer notification scripts.
827 */
828 const char *xfer_common_code(void){
829 return db_get("xfer-common-script", 0);
830 }
831
832 /*
833 ** Return the TH1 code to evaluate when a push is processed.
834 */
835 const char *xfer_push_code(void){
836 return db_get("xfer-push-script", 0);
837 }
838
839 /*
840 ** Return the TH1 code to evaluate when a commit is processed.
841 */
842 const char *xfer_commit_code(void){
843 return db_get("xfer-commit-script", 0);
844 }
845
846 /*
847 ** Return the TH1 code to evaluate when a ticket change is processed.
848 */
849 const char *xfer_ticket_code(void){
850 return db_get("xfer-ticket-script", 0);
851 }
852
853 /*
854 ** Run the specified TH1 script, if any, and returns 1 on error.
855 */
856 int xfer_run_script(const char *zScript, const char *zUuid){
857 int result;
858 if( !zScript ) return TH_OK;
859 Th_FossilInit(TH_INIT_DEFAULT);
860 if( zUuid ){
861 result = Th_SetVar(g.interp, "uuid", -1, zUuid, -1);
862 if( result!=TH_OK ){
863 fossil_error(1, "%s", Th_GetResult(g.interp, 0));
864 return result;
865 }
866 }
867 result = Th_Eval(g.interp, 0, zScript, -1);
 
 
 
 
 
868 if( result!=TH_OK ){
869 fossil_error(1, "%s", Th_GetResult(g.interp, 0));
870 }
871 return result;
872 }
@@ -873,12 +851,21 @@
873
874 /*
875 ** Runs the pre-transfer TH1 script, if any, and returns its return code.
876 */
877 int xfer_run_common_script(void){
878 Th_FossilInit(TH_INIT_DEFAULT);
879 return xfer_run_script(xfer_common_code(), 0);
 
 
 
 
 
 
 
 
 
880 }
881
882 /*
883 ** If this variable is set, disable login checks. Used for debugging
884 ** only.
@@ -1263,11 +1250,11 @@
1263 }
1264 blobarray_reset(xfer.aToken, xfer.nToken);
1265 blob_reset(&xfer.line);
1266 }
1267 if( isPush ){
1268 if( xfer_run_script(xfer_push_code(), 0)!=TH_OK ){
1269 cgi_reset_content();
1270 @ error push\sscript\sfailed:\s%F(g.zErrMsg)
1271 nErr++;
1272 }
1273 request_phantoms(&xfer, 500);
1274
--- src/xfer.c
+++ src/xfer.c
@@ -819,54 +819,32 @@
819 */
820 static void server_private_xfer_not_authorized(void){
821 @ error not\sauthorized\sto\ssync\sprivate\scontent
822 }
823
824 static int commonScriptRan = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
825
826 /*
827 ** Run the specified TH1 script, if any, and returns 1 on error.
828 */
829 int xfer_run_script(const char *zScript, const char *zUuid){
830 int result = 0;
831 if( !commonScriptRan || !zScript || !(zScript = db_get(zScript, 0))){
832 return 0; /* No script or common script didn't run, return success. */
833 }
834 if( commonScriptRan == 1 ){
835 if( zUuid ){
836 result = Th_SetVar(g.interp, "uuid", -1, zUuid, -1);
837 if( result!=TH_OK ){
838 fossil_error(1, "%s", Th_GetResult(g.interp, 0));
839 return result;
840 }
841 }
842 result = Th_Eval(g.interp, 0, zScript, -1) != TH_OK;
843 }else{
844 result = TH_ERROR;
845 }
846 if( result!=TH_OK ){
847 fossil_error(1, "%s", Th_GetResult(g.interp, 0));
848 }
849 return result;
850 }
@@ -873,12 +851,21 @@
851
852 /*
853 ** Runs the pre-transfer TH1 script, if any, and returns its return code.
854 */
855 int xfer_run_common_script(void){
856 int result = 0;
857 if( !commonScriptRan ){
858 Th_FossilInit(TH_INIT_DEFAULT); /* Make sure TH1 is ready. */
859 commonScriptRan = 1; /* enable run_script to do something */
860 result = xfer_run_script("xfer-common-script", 0);
861 if( result == TH_ERROR ){
862 /* Error message is left in th interpreter. */
863 commonScriptRan = 2;
864 }
865 }
866 return result;
867 }
868
869 /*
870 ** If this variable is set, disable login checks. Used for debugging
871 ** only.
@@ -1263,11 +1250,11 @@
1250 }
1251 blobarray_reset(xfer.aToken, xfer.nToken);
1252 blob_reset(&xfer.line);
1253 }
1254 if( isPush ){
1255 if( xfer_run_script("xfer-push-script", 0)!=TH_OK ){
1256 cgi_reset_content();
1257 @ error push\sscript\sfailed:\s%F(g.zErrMsg)
1258 nErr++;
1259 }
1260 request_phantoms(&xfer, 500);
1261

Keyboard Shortcuts

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