Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix multiple bugs associated with the versioned manifest setting. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
dfc0f1b41f6d9cd53455894a6a1e1d96 |
User & Date: | drh 2025-03-13 10:34:34 |
Context
2025-03-13
| ||
17:06 | Add admin-only alert subscription for notification when a user's permissions are elevated. ... (Leaf check-in: d96055cc user: stephan tags: trunk) | |
10:34 | Fix multiple bugs associated with the versioned manifest setting. ... (check-in: dfc0f1b4 user: drh tags: trunk) | |
00:59 | Fix a compiler warning about possible use of an uninitialized variable. Looks like GCC 12 is confused though. ... (check-in: a4cc6e09 user: george tags: trunk) | |
00:43 | In git-export, when the versioned manifest setting changes, be sure to delete manifest files that have become obsolete. ... (Closed-Leaf check-in: 175009a5 user: drh tags: versioned-manifest-setting) | |
Changes
Changes to src/add.c.
︙ | ︙ | |||
76 77 78 79 80 81 82 | /* Cached setting "manifest" */ static int cachedManifest = -1; static int numManifests; if( cachedManifest == -1 ){ int i; Blob repo; | | | 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | /* Cached setting "manifest" */ static int cachedManifest = -1; static int numManifests; if( cachedManifest == -1 ){ int i; Blob repo; cachedManifest = db_get_manifest_setting(0); numManifests = 0; for(i=0; i<count(aManifestflags); i++){ if( cachedManifest&aManifestflags[i].flg ) { azManifests[numManifests++] = aManifestflags[i].fname; } } blob_zero(&repo); |
︙ | ︙ |
Changes to src/checkin.c.
︙ | ︙ | |||
2551 2552 2553 2554 2555 2556 2557 | zComFile = find_option("message-file", "M", 1); sCiInfo.zDateOvrd = find_option("date-override",0,1); sCiInfo.zUserOvrd = find_option("user-override",0,1); noSign = db_get_boolean("omitsign", 0)|noSign; if( db_get_boolean("clearsign", 0)==0 ){ noSign = 1; } useCksum = db_get_boolean("repo-cksum", 1); bIgnoreSkew = find_option("ignore-clock-skew",0,0)!=0; | | | 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 | zComFile = find_option("message-file", "M", 1); sCiInfo.zDateOvrd = find_option("date-override",0,1); sCiInfo.zUserOvrd = find_option("user-override",0,1); noSign = db_get_boolean("omitsign", 0)|noSign; if( db_get_boolean("clearsign", 0)==0 ){ noSign = 1; } useCksum = db_get_boolean("repo-cksum", 1); bIgnoreSkew = find_option("ignore-clock-skew",0,0)!=0; outputManifest = db_get_manifest_setting(0); mxSize = db_large_file_size(); if( find_option("ignore-oversize",0,0)!=0 ) mxSize = 0; verify_all_options(); /* Get the ID of the parent manifest artifact */ vid = db_lget_int("checkout", 0); if( vid==0 ){ |
︙ | ︙ |
Changes to src/checkout.c.
︙ | ︙ | |||
171 172 173 174 175 176 177 | ** each character as a flag to enable writing "manifest", "manifest.uuid" or ** "manifest.tags". */ void manifest_to_disk(int vid){ char *zManFile; int flg; | | | 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | ** each character as a flag to enable writing "manifest", "manifest.uuid" or ** "manifest.tags". */ void manifest_to_disk(int vid){ char *zManFile; int flg; flg = db_get_manifest_setting(0); if( flg & MFESTFLG_RAW ){ Blob manifest = BLOB_INITIALIZER; content_get(vid, &manifest); sterilize_manifest(&manifest, CFTYPE_MANIFEST); zManFile = mprintf("%smanifest", g.zLocalRoot); blob_write_to_file(&manifest, zManFile); |
︙ | ︙ |
Changes to src/db.c.
︙ | ︙ | |||
3645 3646 3647 3648 3649 3650 3651 3652 | ** Return the text of the string if it is found. Return NULL if not ** found. ** ** If the zNonVersionedSetting parameter is not NULL then it holds the ** non-versioned value for this setting. If both a versioned and a ** non-versioned value exist and are not equal, then a warning message ** might be generated. */ | > > > > > > > | > > > > | > > > > | | | | | | | | > > | | < < | < > > | | > | | | < < < < < | | | | | | | | | | | > > > | | | | | | > > | | > > > > | 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 | ** Return the text of the string if it is found. Return NULL if not ** found. ** ** If the zNonVersionedSetting parameter is not NULL then it holds the ** non-versioned value for this setting. If both a versioned and a ** non-versioned value exist and are not equal, then a warning message ** might be generated. ** ** zCkin is normally NULL. In that case, the versioned setting is ** take from the local check-out, if a local checkout exists, or from ** checkin named by the g.zOpenRevision global variable. If zCkin is ** not NULL, then zCkin is the name of the specific checkin from which ** versioned setting value is taken. When zCkin is not NULL, the cache ** is bypassed. */ char *db_get_versioned( const char *zName, char *zNonVersionedSetting, const char *zCkin ){ char *zVersionedSetting = 0; int noWarn = 0; int found = 0; struct _cacheEntry { struct _cacheEntry *next; const char *zName, *zValue; } *cacheEntry = 0; static struct _cacheEntry *cache = 0; if( !g.localOpen && g.zOpenRevision==0 && zCkin==0 ){ return zNonVersionedSetting; } /* Look up name in cache */ if( zCkin==0 ){ cacheEntry = cache; while( cacheEntry!=0 ){ if( fossil_strcmp(cacheEntry->zName, zName)==0 ){ zVersionedSetting = fossil_strdup(cacheEntry->zValue); break; } cacheEntry = cacheEntry->next; } } /* Attempt to read value from file in check-out if there wasn't a cache hit.*/ if( cacheEntry==0 ){ Blob versionedPathname; Blob setting; blob_init(&versionedPathname, 0, 0); blob_init(&setting, 0, 0); if( !g.localOpen || zCkin!=0 ){ /* Repository is in the process of being opened, but files have not been * written to disk. Load from the database. */ blob_appendf(&versionedPathname, ".fossil-settings/%s", zName); if( historical_blob(zCkin ? zCkin : g.zOpenRevision, blob_str(&versionedPathname), &setting, 0) ){ found = 1; } }else{ blob_appendf(&versionedPathname, "%s.fossil-settings/%s", g.zLocalRoot, zName); if( file_size(blob_str(&versionedPathname), ExtFILE)>=0 ){ /* File exists, and contains the value for this setting. Load from ** the file. */ const char *zFile = blob_str(&versionedPathname); if( blob_read_from_file(&setting, zFile, ExtFILE)>=0 ){ found = 1; } /* See if there's a no-warn flag */ blob_append(&versionedPathname, ".no-warn", -1); if( file_size(blob_str(&versionedPathname), ExtFILE)>=0 ){ noWarn = 1; } } } blob_reset(&versionedPathname); if( found ){ blob_strip_comment_lines(&setting, &setting); blob_trim(&setting); /* Avoid non-obvious problems with line endings ** on boolean properties */ zVersionedSetting = fossil_strdup(blob_str(&setting)); } blob_reset(&setting); /* Store result in cache, which can be the value or 0 if not found */ if( zCkin==0 ){ cacheEntry = (struct _cacheEntry*)fossil_malloc(sizeof(*cacheEntry)); cacheEntry->next = cache; cacheEntry->zName = zName; cacheEntry->zValue = fossil_strdup(zVersionedSetting); cache = cacheEntry; } } /* Display a warning? */ if( zVersionedSetting!=0 && zNonVersionedSetting!=0 && zNonVersionedSetting[0]!='\0' && zCkin==0 && !noWarn ){ /* There's a versioned setting, and a non-versioned setting. Tell ** the user about the conflict */ fossil_warning( "setting %s has both versioned and non-versioned values: using " "versioned value from file \"%/.fossil-settings/%s\" (to silence " "this warning, either create an empty file named " "\"%/.fossil-settings/%s.no-warn\" in the check-out root, or delete " "the non-versioned setting with \"fossil unset %s\")", zName, g.zLocalRoot, zName, g.zLocalRoot, zName, zName ); } /* Prefer the versioned setting */ return ( zVersionedSetting!=0 ) ? zVersionedSetting : zNonVersionedSetting; } /* ** Get and set values from the CONFIG, GLOBAL_CONFIG and VVAR table in the |
︙ | ︙ | |||
3776 3777 3778 3779 3780 3781 3782 | } db_reset(&q2); } if( pSetting!=0 && pSetting->versionable ){ /* This is a versionable setting, try and get the info from a ** checked-out file */ char * zZ = z; | | | 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 | } db_reset(&q2); } if( pSetting!=0 && pSetting->versionable ){ /* This is a versionable setting, try and get the info from a ** checked-out file */ char * zZ = z; z = db_get_versioned(zName, z, 0); if(zZ != z){ fossil_free(zZ); } } if( z==0 ){ if( zDefault==0 && pSetting && pSetting->def[0] ){ z = fossil_strdup(pSetting->def); |
︙ | ︙ | |||
3917 3918 3919 3920 3921 3922 3923 | }else if( is_false(zVal) ){ dflt = 0; } fossil_free(zVal); return dflt; } int db_get_versioned_boolean(const char *zName, int dflt){ | | | 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 | }else if( is_false(zVal) ){ dflt = 0; } fossil_free(zVal); return dflt; } int db_get_versioned_boolean(const char *zName, int dflt){ char *zVal = db_get_versioned(zName, 0, 0); if( zVal==0 ) return dflt; if( is_truth(zVal) ) return 1; if( is_false(zVal) ) return 0; return dflt; } char *db_lget(const char *zName, const char *zDefault){ return db_text(zDefault, |
︙ | ︙ | |||
4046 4047 4048 4049 4050 4051 4052 4053 | /* ** Get the manifest setting. For backwards compatibility first check if the ** value is a boolean. If it's not a boolean, treat each character as a flag ** to enable a manifest type. This system puts certain boundary conditions on ** which letters can be used to represent flags (any permutation of flags must ** not be able to fully form one of the boolean values). */ | > > > > > > > > | | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 | /* ** Get the manifest setting. For backwards compatibility first check if the ** value is a boolean. If it's not a boolean, treat each character as a flag ** to enable a manifest type. This system puts certain boundary conditions on ** which letters can be used to represent flags (any permutation of flags must ** not be able to fully form one of the boolean values). ** ** "manifest" is a versionable setting. But we do not issue a warning ** if there is a conflict. Instead, the value returned is the value for ** the versioned setting if the versioned setting exists, or the ordinary ** setting otherwise. ** ** The argument zCkin is the specific check-in for which we want the ** manifest setting. */ int db_get_manifest_setting(const char *zCkin){ int flg; char *zVal; /* Look for the versioned setting first */ zVal = db_get_versioned("manifest", 0, zCkin); if( zVal==0 && g.repositoryOpen ){ /* No versioned setting, look for the repository setting second */ zVal = db_text(0, "SELECT value FROM config WHERE name='manifest'"); } if( zVal==0 || is_false(zVal) ){ return 0; }else if( is_truth(zVal) ){ return MFESTFLG_RAW|MFESTFLG_UUID; } flg = 0; while( *zVal ){ switch( *zVal ){ case 'r': flg |= MFESTFLG_RAW; break; case 'u': flg |= MFESTFLG_UUID; break; case 't': flg |= MFESTFLG_TAGS; break; } zVal++; } return flg; } /* ** COMMAND: test-manifest-setting ** ** Usage: %fossil test-manifest-setting VERSION VERSION ... ** ** Display the value for the "manifest" setting for various versions ** of the repository. */ void test_manfest_setting_cmd(void){ int i; db_find_and_open_repository(0, 0); for(i=2; i<g.argc; i++){ int m = db_get_manifest_setting(g.argv[i]); fossil_print("%s:\n", g.argv[i]); fossil_print(" flags = 0x%02x\n", m); if( m & MFESTFLG_RAW ){ fossil_print(" manifest\n"); } if( m & MFESTFLG_UUID ){ fossil_print(" manifest.uuid\n"); } if( m & MFESTFLG_TAGS ){ fossil_print(" manifest.tags\n"); } } } /* ** Record the name of a local repository in the global_config() database. ** The repository filename %s is recorded as an entry with a "name" field ** of the following form: ** |
︙ | ︙ | |||
4389 4390 4391 4392 4393 4394 4395 | g.zLocalRoot, pSetting->name); if( file_size(blob_str(&versionedPathname), ExtFILE)>=0 ){ versioned = 1; } blob_reset(&versionedPathname); } if( valueOnly && versioned ){ | | | 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 | g.zLocalRoot, pSetting->name); if( file_size(blob_str(&versionedPathname), ExtFILE)>=0 ){ versioned = 1; } blob_reset(&versionedPathname); } if( valueOnly && versioned ){ fossil_print("%s\n", db_get_versioned(pSetting->name, NULL, NULL)); return; } if( g.repositoryOpen ){ db_prepare(&q, "SELECT '(local)', value FROM config WHERE name=%Q" " UNION ALL " "SELECT '(global)', value FROM global_config WHERE name=%Q", |
︙ | ︙ |
Changes to src/export.c.
︙ | ︙ | |||
1072 1073 1074 1075 1076 1077 1078 | ** ** Return zero on success and non-zero if the export should be stopped. */ static int gitmirror_send_checkin( FILE *xCmd, /* Write fast-import text on this pipe */ int rid, /* BLOB.RID for the check-in to export */ const char *zUuid, /* BLOB.UUID for the check-in to export */ | | < > > | | 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 | ** ** Return zero on success and non-zero if the export should be stopped. */ static int gitmirror_send_checkin( FILE *xCmd, /* Write fast-import text on this pipe */ int rid, /* BLOB.RID for the check-in to export */ const char *zUuid, /* BLOB.UUID for the check-in to export */ int *pnLimit /* Stop when the counter reaches zero */ ){ Manifest *pMan; /* The check-in to be output */ int i; /* Loop counter */ int iParent; /* Which immediate ancestor is primary. -1 for none */ Stmt q; /* An SQL query */ char *zBranch; /* The branch of the check-in */ char *zMark; /* The Git-name of the check-in */ Blob sql; /* String of SQL for part of the query */ Blob comment; /* The comment text for the check-in */ int nErr = 0; /* Number of errors */ int bPhantomOk; /* True if phantom files should be ignored */ char buf[24]; char *zEmail; /* Contact info for Git committer field */ int fManifest; /* Should the manifest files be included? */ int fPManifest = 0; /* OR of the manifest files for all parents */ pMan = manifest_get(rid, CFTYPE_MANIFEST, 0); if( pMan==0 ){ /* Must be a phantom. Return without doing anything, and in particular ** without creating a mark for this check-in. */ gitmirror_message(VERB_NORMAL, "missing check-in: %s\n", zUuid); return 0; } /* Check to see if any parent logins have not yet been processed, and ** if so, create them */ for(i=0; i<pMan->nParent; i++){ char *zPMark = gitmirror_find_mark(pMan->azParent[i], 0, 0); if( zPMark==0 ){ int prid = db_int(0, "SELECT rid FROM blob WHERE uuid=%Q", pMan->azParent[i]); int rc = gitmirror_send_checkin(xCmd, prid, pMan->azParent[i], pnLimit); if( rc || *pnLimit<=0 ){ manifest_destroy(pMan); return 1; } } fossil_free(zPMark); } |
︙ | ︙ | |||
1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 | blob_appendf(&comment, "\n\nFossilOrigin-Name: %s", zUuid); fprintf(xCmd, "data %d\n%s\n", blob_strlen(&comment), blob_str(&comment)); blob_reset(&comment); iParent = -1; /* Which ancestor is the primary parent */ for(i=0; i<pMan->nParent; i++){ char *zOther = gitmirror_find_mark(pMan->azParent[i],0,0); if( zOther==0 ) continue; if( iParent<0 ){ iParent = i; fprintf(xCmd, "from %s\n", zOther); }else{ fprintf(xCmd, "merge %s\n", zOther); } fossil_free(zOther); | > | 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 | blob_appendf(&comment, "\n\nFossilOrigin-Name: %s", zUuid); fprintf(xCmd, "data %d\n%s\n", blob_strlen(&comment), blob_str(&comment)); blob_reset(&comment); iParent = -1; /* Which ancestor is the primary parent */ for(i=0; i<pMan->nParent; i++){ char *zOther = gitmirror_find_mark(pMan->azParent[i],0,0); if( zOther==0 ) continue; fPManifest |= db_get_manifest_setting(pMan->azParent[i]); if( iParent<0 ){ iParent = i; fprintf(xCmd, "from %s\n", zOther); }else{ fprintf(xCmd, "merge %s\n", zOther); } fossil_free(zOther); |
︙ | ︙ | |||
1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 | fossil_free(zFNQuoted); } db_finalize(&q); manifest_destroy(pMan); pMan = 0; /* Include Fossil-generated auxiliary files in the check-in */ if( fManifest & MFESTFLG_RAW ){ Blob manifest; content_get(rid, &manifest); sterilize_manifest(&manifest, CFTYPE_MANIFEST); fprintf(xCmd,"M 100644 inline manifest\ndata %d\n%s\n", blob_strlen(&manifest), blob_str(&manifest)); blob_reset(&manifest); } if( fManifest & MFESTFLG_UUID ){ int n = (int)strlen(zUuid); fprintf(xCmd,"M 100644 inline manifest.uuid\ndata %d\n%s\n\n", n+1, zUuid); } if( fManifest & MFESTFLG_TAGS ){ Blob tagslist; blob_init(&tagslist, 0, 0); get_checkin_taglist(rid, &tagslist); fprintf(xCmd,"M 100644 inline manifest.tags\ndata %d\n%s\n", blob_strlen(&tagslist), blob_str(&tagslist)); blob_reset(&tagslist); } /* The check-in is finished, so decrement the counter */ (*pnLimit)--; return 0; } | > > > > > > > | 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 | fossil_free(zFNQuoted); } db_finalize(&q); manifest_destroy(pMan); pMan = 0; /* Include Fossil-generated auxiliary files in the check-in */ fManifest = db_get_manifest_setting(zUuid); if( fManifest & MFESTFLG_RAW ){ Blob manifest; content_get(rid, &manifest); sterilize_manifest(&manifest, CFTYPE_MANIFEST); fprintf(xCmd,"M 100644 inline manifest\ndata %d\n%s\n", blob_strlen(&manifest), blob_str(&manifest)); blob_reset(&manifest); }else if( fPManifest & MFESTFLG_RAW ){ fprintf(xCmd, "D manifest\n"); } if( fManifest & MFESTFLG_UUID ){ int n = (int)strlen(zUuid); fprintf(xCmd,"M 100644 inline manifest.uuid\ndata %d\n%s\n\n", n+1, zUuid); }else if( fPManifest & MFESTFLG_UUID ){ fprintf(xCmd, "D manifest.uuid\n"); } if( fManifest & MFESTFLG_TAGS ){ Blob tagslist; blob_init(&tagslist, 0, 0); get_checkin_taglist(rid, &tagslist); fprintf(xCmd,"M 100644 inline manifest.tags\ndata %d\n%s\n", blob_strlen(&tagslist), blob_str(&tagslist)); blob_reset(&tagslist); }else if( fPManifest & MFESTFLG_TAGS ){ fprintf(xCmd, "D manifest.tags\n"); } /* The check-in is finished, so decrement the counter */ (*pnLimit)--; return 0; } |
︙ | ︙ | |||
1381 1382 1383 1384 1385 1386 1387 | const char *zAutoPush = 0; /* Value of the --autopush flag */ char *zMainBr = 0; /* Value of the --mainbranch flag */ char *zPushUrl; /* URL to sync the mirror to */ double rEnd; /* time of most recent export */ int rc; /* Result code */ int bForce; /* Do the export and sync even if no changes*/ int bNeedRepack = 0; /* True if we should run repack at the end */ | < | 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 | const char *zAutoPush = 0; /* Value of the --autopush flag */ char *zMainBr = 0; /* Value of the --mainbranch flag */ char *zPushUrl; /* URL to sync the mirror to */ double rEnd; /* time of most recent export */ int rc; /* Result code */ int bForce; /* Do the export and sync even if no changes*/ int bNeedRepack = 0; /* True if we should run repack at the end */ int bIfExists; /* The --if-mirrored flag */ FILE *xCmd; /* Pipe to the "git fast-import" command */ FILE *pMarks; /* Git mark files */ Stmt q; /* Queries */ char zLine[200]; /* One line of a mark file */ zDebug = find_option("debug",0,1); |
︙ | ︙ | |||
1519 1520 1521 1522 1523 1524 1525 | " WHERE key='start'),0.0)") ){ gitmirror_message(VERB_NORMAL, "no changes\n"); db_commit_transaction(); return; } | < < < | 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 | " WHERE key='start'),0.0)") ){ gitmirror_message(VERB_NORMAL, "no changes\n"); db_commit_transaction(); return; } /* Change to the MIRROR directory so that the Git commands will work */ rc = file_chdir(zMirror, 0); if( rc ) fossil_fatal("cannot change the working directory to \"%s\"", zMirror); /* Start up the git fast-import command */ if( zDebug ){ |
︙ | ︙ | |||
1577 1578 1579 1580 1581 1582 1583 | "SELECT objid, mtime, uuid FROM tomirror ORDER BY mtime" ); while( nLimit && db_step(&q)==SQLITE_ROW ){ int rid = db_column_int(&q, 0); double rMTime = db_column_double(&q, 1); const char *zUuid = db_column_text(&q, 2); if( rMTime>rEnd ) rEnd = rMTime; | | | 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 | "SELECT objid, mtime, uuid FROM tomirror ORDER BY mtime" ); while( nLimit && db_step(&q)==SQLITE_ROW ){ int rid = db_column_int(&q, 0); double rMTime = db_column_double(&q, 1); const char *zUuid = db_column_text(&q, 2); if( rMTime>rEnd ) rEnd = rMTime; rc = gitmirror_send_checkin(xCmd, rid, zUuid, &nLimit); if( rc ) break; gitmirror_message(VERB_NORMAL,"%d/%d \r", nTotal-nLimit, nTotal); fflush(stdout); } db_finalize(&q); fprintf(xCmd, "done\n"); if( zDebug ){ |
︙ | ︙ |
Changes to src/setup.c.
︙ | ︙ | |||
1155 1156 1157 1158 1159 1160 1161 | @ @ <form action="%R/setup_settings" method="post"><div> @ <table border="0"><tr><td valign="top"> login_insert_csrf_secret(); for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){ if( pSet->width==0 ){ int hasVersionableValue = pSet->versionable && | | | | | 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 | @ @ <form action="%R/setup_settings" method="post"><div> @ <table border="0"><tr><td valign="top"> login_insert_csrf_secret(); for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){ if( pSet->width==0 ){ int hasVersionableValue = pSet->versionable && (db_get_versioned(pSet->name, NULL, NULL)!=0); onoff_attribute("", pSet->name, pSet->var!=0 ? pSet->var : pSet->name /*works-like:"x"*/, is_truth(pSet->def), hasVersionableValue); @ <a href='%R/help?cmd=%s(pSet->name)'>%h(pSet->name)</a> if( pSet->versionable ){ @ (v)<br> } else { @ <br> } } } @ <br><input type="submit" name="submit" value="Apply Changes"> @ </td><td style="width:50px;"></td><td valign="top"> @ <table> for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){ if( pSet->width>0 && !pSet->forceTextArea ){ int hasVersionableValue = pSet->versionable && (db_get_versioned(pSet->name, NULL, NULL)!=0); @ <tr><td> @ <a href='%R/help?cmd=%s(pSet->name)'>%h(pSet->name)</a> if( pSet->versionable ){ @ (v) } else { @ } @</td><td> entry_attribute("", /*pSet->width*/ 25, pSet->name, pSet->var!=0 ? pSet->var : pSet->name /*works-like:"x"*/, (char*)pSet->def, hasVersionableValue); @</td></tr> } } @</table> @ </td><td style="width:50px;"></td><td valign="top"> for(i=0, pSet=aSetting; i<nSetting; i++, pSet++){ if( pSet->width>0 && pSet->forceTextArea ){ int hasVersionableValue = db_get_versioned(pSet->name, NULL, NULL)!=0; @ <a href='%R/help?cmd=%s(pSet->name)'>%s(pSet->name)</a> if( pSet->versionable ){ @ (v)<br> } else { @ <br> } textarea_attribute("", /*rows*/ 2, /*cols*/ 35, pSet->name, |
︙ | ︙ |
Changes to src/tar.c.
︙ | ︙ | |||
497 498 499 500 501 502 503 | nPrefix = blob_size(&filename); pManifest = manifest_get(rid, CFTYPE_MANIFEST, 0); if( pManifest ){ int flg, eflg = 0; mTime = (unsigned)((pManifest->rDate - 2440587.5)*86400.0); if( pTar ) tar_begin(mTime); | | | 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 | nPrefix = blob_size(&filename); pManifest = manifest_get(rid, CFTYPE_MANIFEST, 0); if( pManifest ){ int flg, eflg = 0; mTime = (unsigned)((pManifest->rDate - 2440587.5)*86400.0); if( pTar ) tar_begin(mTime); flg = db_get_manifest_setting(blob_str(&hash)); if( flg ){ /* eflg is the effective flags, taking include/exclude into account */ if( (pInclude==0 || glob_match(pInclude, "manifest")) && !glob_match(pExclude, "manifest") && (flg & MFESTFLG_RAW) ){ eflg |= MFESTFLG_RAW; } |
︙ | ︙ |
Changes to src/zip.c.
︙ | ︙ | |||
650 651 652 653 654 655 656 | nPrefix = blob_size(&filename); pManifest = manifest_get(rid, CFTYPE_MANIFEST, 0); if( pManifest ){ int flg, eflg = 0; char *zName = 0; zip_set_timedate(pManifest->rDate); | | | 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 | nPrefix = blob_size(&filename); pManifest = manifest_get(rid, CFTYPE_MANIFEST, 0); if( pManifest ){ int flg, eflg = 0; char *zName = 0; zip_set_timedate(pManifest->rDate); flg = db_get_manifest_setting(blob_str(&hash)); if( flg ){ /* eflg is the effective flags, taking include/exclude into account */ if( (pInclude==0 || glob_match(pInclude, "manifest")) && !glob_match(pExclude, "manifest") && (flg & MFESTFLG_RAW) ){ eflg |= MFESTFLG_RAW; } |
︙ | ︙ |