diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-02-17 22:39:35 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-02-17 22:39:35 +0100 |
commit | 414b79662786762256e756ece8ab4aaecbbf9bd1 (patch) | |
tree | 8f8b49c3aa94bb20e9f306605b8f43bf186a8947 /src | |
parent | 82f654e092ac5b86316bc1b30c0b07a849813186 (diff) | |
download | vim-git-414b79662786762256e756ece8ab4aaecbbf9bd1.tar.gz |
patch 8.2.0272: ":helptags ALL" gives error for some directoriesv8.2.0272
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)
Diffstat (limited to 'src')
-rw-r--r-- | src/ex_cmds.c | 17 | ||||
-rw-r--r-- | src/testdir/test_help.vim | 16 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 24 insertions, 11 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 0eeb3f339..f92537862 100644 --- 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_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); } } diff --git a/src/testdir/test_help.vim b/src/testdir/test_help.vim index 3b6ad3923..219689bde 100644 --- 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-------') diff --git a/src/version.c b/src/version.c index ad70c4dd0..1008eaf1e 100644 --- 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, |