Here it is. If you prefer a link I will upload it somewhere:

--- src/db.c
+++ src/db.c
@@ -1894,10 +1894,11 @@
   { "autosync",      0,                0, 0, "on"                  },
   { "binary-glob",   0,               32, 1, ""                    },
   { "clearsign",     0,                0, 0, "off"                 },
   { "case-sensitive",0,                0, 0, "on"                  },
   { "crnl-glob",     0,               16, 1, ""                    },
+  { "crnl-autofix-glob",  0,          16, 1, ""                    },
   { "default-perms", 0,               16, 0, "u"                   },
   { "diff-command",  0,               16, 0, ""                    },
   { "dont-push",     0,                0, 0, "off"                 },
   { "editor",        0,               16, 0, ""                    },
   { "gdiff-command", 0,               16, 0, "gdiff"               },
@@ -1983,10 +1984,14 @@
 **                     be unsigned.  Default: off
 **
 **    crnl-glob        A comma or newline-separated list of GLOB patterns
for
 **     (versionable)   text files in which it is ok to have CR+NL line
endings.
 **                     Set to "*" to disable CR+NL checking.
+**
+**    crnl-autofix-glob  A comma or newline-separated list of GLOB
patterns for
+**     (versionable)   text files which should have CR+NL line endings
+**                     automatically fixed to CR
 **
 **    default-perms    Permissions given automatically to new users.  For
more
 **                     information on permissions see Users page in Server
 **                     Administration of the HTTP UI. Default: u.
 **

--- src/checkin.c
+++ src/checkin.c
@@ -816,16 +816,24 @@
   blob_appendf(pOut, "U %F\n", zUserOvrd ? zUserOvrd : g.zLogin);
   md5sum_blob(pOut, &mcksum);
   blob_appendf(pOut, "Z %b\n", &mcksum);
   if( pnFBcard ) *pnFBcard = nFBcard;
 }
+
+/*
+** Correct al \r\n line endings in a text file to \n
+*/
+static void cr_fix(Blob *p, const char *zFilename){
+  blob_remove_cr(p);
+  blob_write_to_file(p, zFilename);
+}

 /*
 ** Issue a warning and give the user an opportunity to abandon out
 ** if a \r\n line ending is seen in a text file.
 */
-static void cr_warning(const Blob *p, const char *zFilename){
+static void cr_warning(Blob *p, const char *zFilename){
   int nCrNl = 0;          /* Number of \r\n line endings seen */
   const unsigned char *z; /* File text */
   int n;                  /* Size of the file in bytes */
   int lastNl = 0;         /* Characters since last \n */
   int i;                  /* Loop counter */
@@ -854,17 +862,19 @@
   if( nCrNl ){
     char c;
     file_relative_name(zFilename, &fname, 0);
     blob_zero(&ans);
     zMsg = mprintf(
-         "%s contains CR/NL line endings; commit anyhow (yes/no/all)?",
+         "%s contains CR/NL line endings; commit anyhow
(yes/no/all/fix)?",
          blob_str(&fname));
     prompt_user(zMsg, &ans);
     fossil_free(zMsg);
     c = blob_str(&ans)[0];
     if( c=='a' ){
       allOk = 1;
+    }else if( c=='f' ){
+      cr_fix(p, zFilename);
     }else if( c!='y' ){
       fossil_fatal("Abandoning commit due to CR+NL line endings in %s",
                    blob_str(&fname));
     }
     blob_reset(&ans);
@@ -1150,33 +1160,42 @@
   /* Step 1: Insert records for all modified files into the blob
   ** table. If there were arguments passed to this command, only
   ** the identified fils are inserted (if they have been modified).
   */
   db_prepare(&q,
-    "SELECT id, %Q || pathname, mrid, %s FROM vfile "
+    "SELECT id, %Q || pathname, mrid, %s, %s FROM vfile "
     "WHERE chnged==1 AND NOT deleted AND file_is_selected(id)",
-    g.zLocalRoot, glob_expr("pathname", db_get("crnl-glob",""))
+    g.zLocalRoot,
+    glob_expr("pathname", db_get("crnl-glob","")),
+    glob_expr("pathname", db_get("crnl-autofix-glob",""))
   );
   while( db_step(&q)==SQLITE_ROW ){
     int id, rid;
     const char *zFullname;
     Blob content;
-    int crnlOk;
+    int crnlOk, crnlFix;

     id = db_column_int(&q, 0);
     zFullname = db_column_text(&q, 1);
     rid = db_column_int(&q, 2);
     crnlOk = db_column_int(&q, 3);
+    crnlFix = db_column_int(&q, 4);

     blob_zero(&content);
     if( file_wd_islink(zFullname) ){
       /* Instead of file content, put link destination path */
       blob_read_link(&content, zFullname);
     }else{
       blob_read_from_file(&content, zFullname);
     }
-    if( !crnlOk ) cr_warning(&content, zFullname);
+    if( !crnlOk ){
+      if( crnlFix ){
+        cr_fix(&content, zFullname);
+      }else{
+        cr_warning(&content, zFullname);
+      }
+    }
     nrid = content_put(&content);
     blob_reset(&content);
     if( rid>0 ){
       content_deltify(rid, nrid, 0);
     }



On Mon, Jun 11, 2012 at 10:18 PM, Richard Hipp <d...@sqlite.org> wrote:

>
>
> On Mon, Jun 11, 2012 at 3:12 PM, Baruch Burstein <bmburst...@gmail.com>wrote:
>
>> I have made a small addition that I would like to propose for fossil
>> (option to auto-convert line endings). How and where should I send it?
>>
>
> Post the diffs, or a link to the diffs, on this mailing list.
>
>
>
>>
>> --
>> ˙uʍop-ǝpısdn sı ɹoʇıuoɯ ɹnoʎ 'sıɥʇ pɐǝɹ uɐɔ noʎ ɟı
>>
>>
>> _______________________________________________
>> fossil-users mailing list
>> fossil-users@lists.fossil-scm.org
>> http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
>>
>>
>
>
> --
> D. Richard Hipp
> d...@sqlite.org
>
> _______________________________________________
> fossil-users mailing list
> fossil-users@lists.fossil-scm.org
> http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
>
>


-- 
˙uʍop-ǝpısdn sı ɹoʇıuoɯ ɹnoʎ 'sıɥʇ pɐǝɹ uɐɔ noʎ ɟı
_______________________________________________
fossil-users mailing list
fossil-users@lists.fossil-scm.org
http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users

Reply via email to