changeset 19429:7096af834c42 v8.2.0272

patch 8.2.0272: ":helptags ALL" gives error for some directories Commit: https://github.com/vim/vim/commit/414b79662786762256e756ece8ab4aaecbbf9bd1 Author: Bram Moolenaar <Bram@vim.org> Date: Mon Feb 17 22:39:35 2020 +0100 patch 8.2.0272: ":helptags ALL" gives error for some directories 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)
author Bram Moolenaar <Bram@vim.org>
date Mon, 17 Feb 2020 22:45:03 +0100
parents 1f9e7e703f24
children f08b2ab4e1d0
files src/ex_cmds.c src/testdir/test_help.vim src/version.c
diffstat 3 files changed, 24 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -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_hel
 	    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_hel
 
 #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);
     }
 }
--- a/src/testdir/test_help.vim
+++ b/src/testdir/test_help.vim
@@ -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-------')
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    272,
+/**/
     271,
 /**/
     270,