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, <ddevie...@gmail.com> wrote:

> On Wed, Mar 20, 2019 at 5:13 PM Захар Малиновский <
> zakhar.malinovs...@gmail.com> 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
> sqlite-users@mailinglists.sqlite.org
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
>
_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to