diff options
Diffstat (limited to 'data/vim/patches/8.1.0251')
-rw-r--r-- | data/vim/patches/8.1.0251 | 365 |
1 files changed, 365 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0251 b/data/vim/patches/8.1.0251 new file mode 100644 index 000000000..f5b927a09 --- /dev/null +++ b/data/vim/patches/8.1.0251 @@ -0,0 +1,365 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0251 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0251 +Problem: Using a full path is supported for 'directory' but not for + 'backupdir'. (Mikolaj Machowski) +Solution: Support 'backupdir' as well. (Christian Brabandt, closes #179) +Files: runtime/doc/options.txt, src/fileio.c, src/memline.c, + src/proto/memline.pro, src/testdir/test_alot.vim, + src/testdir/test_backup.vim, src/Make_all.mak + + +*** ../vim-8.1.0250/runtime/doc/options.txt 2018-06-23 19:22:45.598486362 +0200 +--- runtime/doc/options.txt 2018-08-07 21:04:11.238964573 +0200 +*************** +*** 1052,1057 **** +--- 1054,1067 ---- + name, precede it with a backslash. + - To include a comma in a directory name precede it with a backslash. + - A directory name may end in an '/'. ++ - For Unix and Win32, if a directory ends in two path separators "//", ++ the swap file name will be built from the complete path to the file ++ with all path separators changed to percent '%' signs. This will ++ ensure file name uniqueness in the backup directory. ++ On Win32, it is also possible to end with "\\". However, When a ++ separating comma is following, you must use "//", since "\\" will ++ include the comma in the file name. Therefore it is recommended to ++ use '//', instead of '\\'. + - Environment variables are expanded |:set_env|. + - Careful with '\' characters, type one before a space, type two to + get one in the option (see |option-backslash|), for example: > +*************** +*** 2678,2689 **** + - A directory starting with "./" (or ".\" for MS-DOS et al.) means to + put the swap file relative to where the edited file is. The leading + "." is replaced with the path name of the edited file. +! - For Unix and Win32, if a directory ends in two path separators "//" +! or "\\", the swap file name will be built from the complete path to +! the file with all path separators substituted to percent '%' signs. +! This will ensure file name uniqueness in the preserve directory. +! On Win32, when a separating comma is following, you must use "//", +! since "\\" will include the comma in the file name. + - Spaces after the comma are ignored, other spaces are considered part + of the directory name. To have a space at the start of a directory + name, precede it with a backslash. +--- 2688,2701 ---- + - A directory starting with "./" (or ".\" for MS-DOS et al.) means to + put the swap file relative to where the edited file is. The leading + "." is replaced with the path name of the edited file. +! - For Unix and Win32, if a directory ends in two path separators "//", +! the swap file name will be built from the complete path to the file +! with all path separators substituted to percent '%' signs. This will +! ensure file name uniqueness in the preserve directory. +! On Win32, it is also possible to end with "\\". However, When a +! separating comma is following, you must use "//", since "\\" will +! include the comma in the file name. Therefore it is recommended to +! use '//', instead of '\\'. + - Spaces after the comma are ignored, other spaces are considered part + of the directory name. To have a space at the start of a directory + name, precede it with a backslash. +*** ../vim-8.1.0250/src/fileio.c 2018-08-01 17:53:04.689381294 +0200 +--- src/fileio.c 2018-08-07 21:36:54.903803767 +0200 +*************** +*** 3850,3855 **** +--- 3850,3858 ---- + stat_T st_new; + char_u *dirp; + char_u *rootname; ++ #if defined(UNIX) || defined(WIN3264) ++ char_u *p; ++ #endif + #if defined(UNIX) + int did_set_shortname; + mode_t umask_save; +*************** +*** 3887,3892 **** +--- 3890,3906 ---- + * Isolate one directory name, using an entry in 'bdir'. + */ + (void)copy_option_part(&dirp, copybuf, BUFSIZE, ","); ++ ++ #if defined(UNIX) || defined(WIN3264) ++ p = copybuf + STRLEN(copybuf); ++ if (after_pathsep(copybuf, p) && p[-1] == p[-2]) ++ // Ends with '//', use full path ++ if ((p = make_percent_swname(copybuf, fname)) != NULL) ++ { ++ backup = modname(p, backup_ext, FALSE); ++ vim_free(p); ++ } ++ #endif + rootname = get_file_in_dir(fname, copybuf); + if (rootname == NULL) + { +*************** +*** 3904,3912 **** + for (;;) + { + /* +! * Make backup file name. + */ +! backup = buf_modname((buf->b_p_sn || buf->b_shortname), + rootname, backup_ext, FALSE); + if (backup == NULL) + { +--- 3918,3927 ---- + for (;;) + { + /* +! * Make the backup file name. + */ +! if (backup == NULL) +! backup = buf_modname((buf->b_p_sn || buf->b_shortname), + rootname, backup_ext, FALSE); + if (backup == NULL) + { +*************** +*** 4108,4121 **** + * Isolate one directory name and make the backup file name. + */ + (void)copy_option_part(&dirp, IObuff, IOSIZE, ","); +! rootname = get_file_in_dir(fname, IObuff); +! if (rootname == NULL) +! backup = NULL; +! else + { +! backup = buf_modname((buf->b_p_sn || buf->b_shortname), +! rootname, backup_ext, FALSE); +! vim_free(rootname); + } + + if (backup != NULL) +--- 4123,4151 ---- + * Isolate one directory name and make the backup file name. + */ + (void)copy_option_part(&dirp, IObuff, IOSIZE, ","); +! +! #if defined(UNIX) || defined(WIN3264) +! p = IObuff + STRLEN(IObuff); +! if (after_pathsep(IObuff, p) && p[-1] == p[-2]) +! // path ends with '//', use full path +! if ((p = make_percent_swname(IObuff, fname)) != NULL) +! { +! backup = modname(p, backup_ext, FALSE); +! vim_free(p); +! } +! #endif +! if (backup == NULL) + { +! rootname = get_file_in_dir(fname, IObuff); +! if (rootname == NULL) +! backup = NULL; +! else +! { +! backup = buf_modname( +! (buf->b_p_sn || buf->b_shortname), +! rootname, backup_ext, FALSE); +! vim_free(rootname); +! } + } + + if (backup != NULL) +*************** +*** 6252,6258 **** + #endif + + /* +! * add extension to file name - change path/fo.o.h to path/fo.o.h.ext or + * fo_o_h.ext for MSDOS or when shortname option set. + * + * Assumed that fname is a valid name found in the filesystem we assure that +--- 6282,6288 ---- + #endif + + /* +! * Add extension to file name - change path/fo.o.h to path/fo.o.h.ext or + * fo_o_h.ext for MSDOS or when shortname option set. + * + * Assumed that fname is a valid name found in the filesystem we assure that +*** ../vim-8.1.0250/src/memline.c 2018-05-26 17:35:19.717625256 +0200 +--- src/memline.c 2018-08-07 21:32:43.441160597 +0200 +*************** +*** 262,270 **** + #endif + static void long_to_char(long, char_u *); + static long char_to_long(char_u *); +- #if defined(UNIX) || defined(WIN3264) +- static char_u *make_percent_swname(char_u *dir, char_u *name); +- #endif + #ifdef FEAT_CRYPT + static cryptstate_T *ml_crypt_prepare(memfile_T *mfp, off_T offset, int reading); + #endif +--- 262,267 ---- +*************** +*** 2007,2024 **** + return file_count; + } + +! #if defined(UNIX) || defined(WIN3264) /* Need _very_ long file names */ + /* + * Append the full path to name with path separators made into percent + * signs, to dir. An unnamed buffer is handled as "" (<currentdir>/"") + */ +! static char_u * + make_percent_swname(char_u *dir, char_u *name) + { +! char_u *d, *s, *f; + +! f = fix_fname(name != NULL ? name : (char_u *) ""); +! d = NULL; + if (f != NULL) + { + s = alloc((unsigned)(STRLEN(f) + 1)); +--- 2004,2021 ---- + return file_count; + } + +! #if defined(UNIX) || defined(WIN3264) || defined(PROTO) + /* ++ * Need _very_ long file names. + * Append the full path to name with path separators made into percent + * signs, to dir. An unnamed buffer is handled as "" (<currentdir>/"") + */ +! char_u * + make_percent_swname(char_u *dir, char_u *name) + { +! char_u *d = NULL, *s, *f; + +! f = fix_fname(name != NULL ? name : (char_u *)""); + if (f != NULL) + { + s = alloc((unsigned)(STRLEN(f) + 1)); +*************** +*** 4070,4077 **** + } + + #if defined(FEAT_EVAL) +- static int do_swapexists(buf_T *buf, char_u *fname); +- + /* + * Trigger the SwapExists autocommands. + * Returns a value for equivalent to do_dialog() (see below): +--- 4067,4072 ---- +*** ../vim-8.1.0250/src/proto/memline.pro 2018-05-17 13:52:44.000000000 +0200 +--- src/proto/memline.pro 2018-08-07 20:56:46.217467718 +0200 +*************** +*** 34,37 **** +--- 34,38 ---- + void ml_decrypt_data(memfile_T *mfp, char_u *data, off_T offset, unsigned size); + long ml_find_line_or_offset(buf_T *buf, linenr_T lnum, long *offp); + void goto_byte(long cnt); ++ char_u *make_percent_swname (char_u *dir, char_u *name); + /* vim: set ft=c : */ +*** ../vim-8.1.0250/src/testdir/test_alot.vim 2018-07-23 04:11:37.648969780 +0200 +--- src/testdir/test_alot.vim 2018-08-07 20:57:34.725202003 +0200 +*************** +*** 2,7 **** +--- 2,8 ---- + " This makes testing go faster, since Vim doesn't need to restart. + + source test_assign.vim ++ source test_backup.vim + source test_bufline.vim + source test_cd.vim + source test_changedtick.vim +*** ../vim-8.1.0250/src/testdir/test_backup.vim 2018-08-07 21:37:56.879462014 +0200 +--- src/testdir/test_backup.vim 2018-08-07 21:21:16.656940451 +0200 +*************** +*** 0 **** +--- 1,58 ---- ++ " Tests for the backup function ++ ++ func Test_backup() ++ set backup backupdir=. ++ new ++ call setline(1, ['line1', 'line2']) ++ :f Xbackup.txt ++ :w! Xbackup.txt ++ " backup file is only created after ++ " writing a second time (before overwriting) ++ :w! Xbackup.txt ++ let l = readfile('Xbackup.txt~') ++ call assert_equal(['line1', 'line2'], l) ++ bw! ++ set backup&vim backupdir&vim ++ call delete('Xbackup.txt') ++ call delete('Xbackup.txt~') ++ endfunc ++ ++ func Test_backup2() ++ set backup backupdir=.// ++ new ++ call setline(1, ['line1', 'line2', 'line3']) ++ :f Xbackup.txt ++ :w! Xbackup.txt ++ " backup file is only created after ++ " writing a second time (before overwriting) ++ :w! Xbackup.txt ++ sp *Xbackup.txt~ ++ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$')) ++ let f=expand('%') ++ call assert_match('src%testdir%Xbackup.txt\~', f) ++ bw! ++ bw! ++ call delete('Xbackup.txt') ++ call delete(f) ++ set backup&vim backupdir&vim ++ endfunc ++ ++ func Test_backup2_backupcopy() ++ set backup backupdir=.// backupcopy=yes ++ new ++ call setline(1, ['line1', 'line2', 'line3']) ++ :f Xbackup.txt ++ :w! Xbackup.txt ++ " backup file is only created after ++ " writing a second time (before overwriting) ++ :w! Xbackup.txt ++ sp *Xbackup.txt~ ++ call assert_equal(['line1', 'line2', 'line3'], getline(1,'$')) ++ let f=expand('%') ++ call assert_match('src%testdir%Xbackup.txt\~', f) ++ bw! ++ bw! ++ call delete('Xbackup.txt') ++ call delete(f) ++ set backup&vim backupdir&vim backupcopy&vim ++ endfunc +*** ../vim-8.1.0250/src/Make_all.mak 2018-07-23 04:11:37.644969804 +0200 +--- src/Make_all.mak 2018-08-07 21:17:31.690274783 +0200 +*************** +*** 12,17 **** +--- 12,18 ---- + test_autocmd \ + test_autoload \ + test_backspace_opt \ ++ test_backup \ + test_blockedit \ + test_breakindent \ + test_bufline \ +*** ../vim-8.1.0250/src/version.c 2018-08-07 20:47:02.756848221 +0200 +--- src/version.c 2018-08-07 20:59:39.444509393 +0200 +*************** +*** 796,797 **** +--- 796,799 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 251, + /**/ + +-- +TALL KNIGHT: When you have found the shrubbery, then you must cut down the + mightiest tree in the forest ... with a herring. + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |