summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0251
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0251')
-rw-r--r--data/vim/patches/8.1.0251365
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 ///