Yes, timestamps only.
Sqlar does not has a column for checksum or sha.
Here comes the patch:
Index: src/shell.c.in
==================================================================
--- src/shell.c.in
+++ src/shell.c.in
@@ -5820,10 +5820,30 @@
" mtime,\n"
" data\n"
" FROM fsdir(%Q,%Q)\n"
" WHERE lsmode(mode) NOT LIKE '?%%';"
};
+
+ // updates only newer files
+ const char * zInsertFmtNewer =
+ "REPLACE INTO %s(name,mode,mtime,sz,data)\n"
+ " SELECT\n"
+ " %s,\n"
+ " fs.mode,\n"
+ " fs.mtime,\n"
+ " CASE substr(lsmode(fs.mode),1,1)\n"
+ " WHEN '-' THEN length(fs.data)\n"
+ " WHEN 'd' THEN 0\n"
+ " ELSE -1 END,\n"
+ " sqlar_compress(fs.data)\n"
+ " FROM fsdir(%Q,%Q) as fs\n"
+ " left join sqlar on sqlar.name = fs.name \n"
+ " WHERE lsmode(fs.mode) NOT LIKE '?%%' \n"
+ " and (fs.mtime > sqlar.mtime or sqlar.name isnull) \n"
+ " ;\n";
+
+
int i; /* For iterating through azFile[] */
int rc; /* Return code */
const char *zTab = 0; /* SQL table into which to insert */
char *zSql;
char zTemp[50];
@@ -5856,13 +5876,23 @@
if( rc!=SQLITE_OK ) goto end_ar_transaction;
}
rc = arExecSql(pAr, zCreate);
}
for(i=0; i<pAr->nArg && rc==SQLITE_OK; i++){
- char *zSql2 = sqlite3_mprintf(zInsertFmt[pAr->bZip], zTab,
- pAr->bVerbose ? "shell_putsnl(name)" : "name",
+
+ char *zSql2;
+ if( bUpdate!=0 && !pAr->bZip) {
+ // updates only newer files
+ zSql2 = sqlite3_mprintf(zInsertFmtNewer, zTab,
+ pAr->bVerbose ? "shell_putsnl(fs.name)" : "fs.name",
pAr->azArg[i], pAr->zDir);
+ } else {
+ zSql2 = sqlite3_mprintf(zInsertFmt[pAr->bZip], zTab,
+ pAr->bVerbose ? "shell_putsnl(name)" : "name",
+ pAr->azArg[i], pAr->zDir);
+
+ }
rc = arExecSql(pAr, zSql2);
sqlite3_free(zSql2);
}
end_ar_transaction:
if( rc!=SQLITE_OK ){
On Wed, 20 Mar 2019, 18:18 Dominique Devienne, <[email protected]> wrote:
> On Wed, Mar 20, 2019 at 5:13 PM Захар Малиновский <
> [email protected]> wrote:
>
> > Here I include patch file with the changes: fossil diff --from trunk
> .\src\
> > shell.c.in > patch-updateOnlyNewer.patch
> > (see patch file patch-updateOnlyNewer.patch)
> >
>
> Copy/paste it inline to your message. Attachments are stripped on this ML.
> --DD
>
> PS: based on timestamps only? Using a checksum (MD5, SHA1, SHA3, whatever)
> would be "safer", if a little slower.
> Of course, that assumes SQLar uses a checksum. I don't recall, I thought
> not.
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users