]> granicus.if.org Git - vim/commitdiff
patch 8.2.0272: ":helptags ALL" gives error for some directories v8.2.0272
authorBram Moolenaar <Bram@vim.org>
Mon, 17 Feb 2020 21:39:35 +0000 (22:39 +0100)
committerBram Moolenaar <Bram@vim.org>
Mon, 17 Feb 2020 21:39:35 +0000 (22:39 +0100)
Problem:    ":helptags ALL" gives error for directories without write
            permission. (MatÄ›j Cepl)
Solution:   Ignore errors for ":helptags ALL". (Ken Takata, closes #5026,
            closes #5652)

src/ex_cmds.c
src/testdir/test_help.vim
src/version.c

index 0eeb3f33996ba79f6cbbec92fda99dde20753e62..f92537862f2de8c2970e4a36cba49f809664205f 100644 (file)
@@ -5920,7 +5920,8 @@ helptags_one(
     char_u     *dir,           // doc directory
     char_u     *ext,           // suffix, ".txt", ".itx", ".frx", etc.
     char_u     *tagfname,      // "tags" for English, "tags-fr" for French.
-    int                add_help_tags)  // add "help-tags" tag
+    int                add_help_tags,  // add "help-tags" tag
+    int                ignore_writeerr)    // ignore write error
 {
     FILE       *fd_tags;
     FILE       *fd;
@@ -5964,7 +5965,8 @@ helptags_one(
     fd_tags = mch_fopen((char *)NameBuff, "w");
     if (fd_tags == NULL)
     {
-       semsg(_("E152: Cannot open %s for writing"), NameBuff);
+       if (!ignore_writeerr)
+           semsg(_("E152: Cannot open %s for writing"), NameBuff);
        FreeWild(filecount, files);
        return;
     }
@@ -6165,7 +6167,7 @@ helptags_one(
  * Generate tags in one help directory, taking care of translations.
  */
     static void
-do_helptags(char_u *dirname, int add_help_tags)
+do_helptags(char_u *dirname, int add_help_tags, int ignore_writeerr)
 {
 #ifdef FEAT_MULTI_LANG
     int                len;
@@ -6251,7 +6253,7 @@ do_helptags(char_u *dirname, int add_help_tags)
            ext[1] = fname[5];
            ext[2] = fname[6];
        }
-       helptags_one(dirname, ext, fname, add_help_tags);
+       helptags_one(dirname, ext, fname, add_help_tags, ignore_writeerr);
     }
 
     ga_clear(&ga);
@@ -6259,14 +6261,15 @@ do_helptags(char_u *dirname, int add_help_tags)
 
 #else
     // No language support, just use "*.txt" and "tags".
-    helptags_one(dirname, (char_u *)".txt", (char_u *)"tags", add_help_tags);
+    helptags_one(dirname, (char_u *)".txt", (char_u *)"tags", add_help_tags,
+                                                           ignore_writeerr);
 #endif
 }
 
     static void
 helptags_cb(char_u *fname, void *cookie)
 {
-    do_helptags(fname, *(int *)cookie);
+    do_helptags(fname, *(int *)cookie, TRUE);
 }
 
 /*
@@ -6300,7 +6303,7 @@ ex_helptags(exarg_T *eap)
        if (dirname == NULL || !mch_isdir(dirname))
            semsg(_("E150: Not a directory: %s"), eap->arg);
        else
-           do_helptags(dirname, add_help_tags);
+           do_helptags(dirname, add_help_tags, FALSE);
        vim_free(dirname);
     }
 }
index 3b6ad3923bb6f3a3d13aaac44943d656b89733c6..219689bde56bb4e836f86c3a1b3410ad66cc6e3e 100644 (file)
@@ -90,10 +90,18 @@ func Test_helptag_cmd()
   " The following tests fail on FreeBSD for some reason
   if has('unix') && !has('bsd')
     " Read-only tags file
-    call writefile([''], 'Xdir/tags')
-    call setfperm('Xdir/tags', 'r-xr--r--')
-    call assert_fails('helptags Xdir', 'E152:', getfperm('Xdir/tags'))
-    call delete('Xdir/tags')
+    call mkdir('Xdir/doc', 'p')
+    call writefile([''], 'Xdir/doc/tags')
+    call writefile([], 'Xdir/doc/sample.txt')
+    call setfperm('Xdir/doc/tags', 'r-xr--r--')
+    call assert_fails('helptags Xdir/doc', 'E152:', getfperm('Xdir/doc/tags'))
+
+    let rtp = &rtp
+    let &rtp = 'Xdir'
+    helptags ALL
+    let &rtp = rtp
+
+    call delete('Xdir/doc/tags')
 
     " No permission to read the help file
     call setfperm('Xdir/a/doc/sample.txt', '-w-------')
index ad70c4dd0bd0c3707748af9e2b27f006a649b092..1008eaf1e6470f40ee5d696c31d506c533160d56 100644 (file)
@@ -738,6 +738,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    272,
 /**/
     271,
 /**/