mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:7.4.456
Problem: 'backupcopy' is global, cannot write only some files in a different way. Solution: Make 'backupcopy' global-local. (Christian Brabandt) https://code.google.com/p/vim/source/detail?r=v7-4-456
This commit is contained in:
parent
5a1cddc47b
commit
7e31044cd8
@ -921,7 +921,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
|
|
||||||
*'backupcopy'* *'bkc'*
|
*'backupcopy'* *'bkc'*
|
||||||
'backupcopy' 'bkc' string (Vi default for Unix: "yes", otherwise: "auto")
|
'backupcopy' 'bkc' string (Vi default for Unix: "yes", otherwise: "auto")
|
||||||
global
|
global or local to buffer |global-local|
|
||||||
{not in Vi}
|
{not in Vi}
|
||||||
When writing a file and a backup is made, this option tells how it's
|
When writing a file and a backup is made, this option tells how it's
|
||||||
done. This is a comma separated list of words.
|
done. This is a comma separated list of words.
|
||||||
|
@ -1530,6 +1530,7 @@ void free_buf_options(buf_T *buf, int free_p_ff)
|
|||||||
buf->b_p_ar = -1;
|
buf->b_p_ar = -1;
|
||||||
buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
|
buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
|
||||||
clear_string_option(&buf->b_p_lw);
|
clear_string_option(&buf->b_p_lw);
|
||||||
|
clear_string_option(&buf->b_p_bkc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -596,6 +596,8 @@ struct file_buffer {
|
|||||||
|
|
||||||
int b_p_ai; /* 'autoindent' */
|
int b_p_ai; /* 'autoindent' */
|
||||||
int b_p_ai_nopaste; /* b_p_ai saved for paste mode */
|
int b_p_ai_nopaste; /* b_p_ai saved for paste mode */
|
||||||
|
char_u *b_p_bkc; ///< 'backupcopy'
|
||||||
|
unsigned int b_bkc_flags; ///< flags for 'backupcopy'
|
||||||
int b_p_ci; /* 'copyindent' */
|
int b_p_ci; /* 'copyindent' */
|
||||||
int b_p_bin; /* 'binary' */
|
int b_p_bin; /* 'binary' */
|
||||||
int b_p_bomb; /* 'bomb' */
|
int b_p_bomb; /* 'bomb' */
|
||||||
|
@ -2313,6 +2313,7 @@ buf_write (
|
|||||||
#endif
|
#endif
|
||||||
int write_undo_file = FALSE;
|
int write_undo_file = FALSE;
|
||||||
context_sha256_T sha_ctx;
|
context_sha256_T sha_ctx;
|
||||||
|
unsigned int bkc = get_bkc_value(buf);
|
||||||
|
|
||||||
if (fname == NULL || *fname == NUL) /* safety check */
|
if (fname == NULL || *fname == NUL) /* safety check */
|
||||||
return FAIL;
|
return FAIL;
|
||||||
@ -2701,9 +2702,9 @@ buf_write (
|
|||||||
if (!(append && *p_pm == NUL) && !filtering && perm >= 0 && dobackup) {
|
if (!(append && *p_pm == NUL) && !filtering && perm >= 0 && dobackup) {
|
||||||
FileInfo file_info;
|
FileInfo file_info;
|
||||||
|
|
||||||
if ((bkc_flags & BKC_YES) || append) { /* "yes" */
|
if ((bkc & BKC_YES) || append) { /* "yes" */
|
||||||
backup_copy = TRUE;
|
backup_copy = TRUE;
|
||||||
} else if ((bkc_flags & BKC_AUTO)) { /* "auto" */
|
} else if ((bkc & BKC_AUTO)) { /* "auto" */
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
# ifdef UNIX
|
# ifdef UNIX
|
||||||
@ -2758,19 +2759,19 @@ buf_write (
|
|||||||
/*
|
/*
|
||||||
* Break symlinks and/or hardlinks if we've been asked to.
|
* Break symlinks and/or hardlinks if we've been asked to.
|
||||||
*/
|
*/
|
||||||
if ((bkc_flags & BKC_BREAKSYMLINK) || (bkc_flags & BKC_BREAKHARDLINK)) {
|
if ((bkc & BKC_BREAKSYMLINK) || (bkc & BKC_BREAKHARDLINK)) {
|
||||||
# ifdef UNIX
|
# ifdef UNIX
|
||||||
bool file_info_link_ok = os_fileinfo_link((char *)fname, &file_info);
|
bool file_info_link_ok = os_fileinfo_link((char *)fname, &file_info);
|
||||||
|
|
||||||
/* Symlinks. */
|
/* Symlinks. */
|
||||||
if ((bkc_flags & BKC_BREAKSYMLINK)
|
if ((bkc & BKC_BREAKSYMLINK)
|
||||||
&& file_info_link_ok
|
&& file_info_link_ok
|
||||||
&& !os_fileinfo_id_equal(&file_info, &file_info_old)) {
|
&& !os_fileinfo_id_equal(&file_info, &file_info_old)) {
|
||||||
backup_copy = FALSE;
|
backup_copy = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Hardlinks. */
|
/* Hardlinks. */
|
||||||
if ((bkc_flags & BKC_BREAKHARDLINK)
|
if ((bkc & BKC_BREAKHARDLINK)
|
||||||
&& os_fileinfo_hardlinks(&file_info_old) > 1
|
&& os_fileinfo_hardlinks(&file_info_old) > 1
|
||||||
&& (!file_info_link_ok
|
&& (!file_info_link_ok
|
||||||
|| os_fileinfo_id_equal(&file_info, &file_info_old))) {
|
|| os_fileinfo_id_equal(&file_info, &file_info_old))) {
|
||||||
|
@ -103,6 +103,7 @@
|
|||||||
*/
|
*/
|
||||||
#define PV_AI OPT_BUF(BV_AI)
|
#define PV_AI OPT_BUF(BV_AI)
|
||||||
#define PV_AR OPT_BOTH(OPT_BUF(BV_AR))
|
#define PV_AR OPT_BOTH(OPT_BUF(BV_AR))
|
||||||
|
#define PV_BKC OPT_BOTH(OPT_BUF(BV_BKC))
|
||||||
# define PV_BH OPT_BUF(BV_BH)
|
# define PV_BH OPT_BUF(BV_BH)
|
||||||
# define PV_BT OPT_BUF(BV_BT)
|
# define PV_BT OPT_BUF(BV_BT)
|
||||||
# define PV_EFM OPT_BOTH(OPT_BUF(BV_EFM))
|
# define PV_EFM OPT_BOTH(OPT_BUF(BV_EFM))
|
||||||
@ -438,7 +439,7 @@ static struct vimoption
|
|||||||
(char_u *)&p_bk, PV_NONE,
|
(char_u *)&p_bk, PV_NONE,
|
||||||
{(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
|
{(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
|
||||||
{"backupcopy", "bkc", P_STRING|P_VIM|P_COMMA|P_NODUP,
|
{"backupcopy", "bkc", P_STRING|P_VIM|P_COMMA|P_NODUP,
|
||||||
(char_u *)&p_bkc, PV_NONE,
|
(char_u *)&p_bkc, PV_BKC,
|
||||||
#ifdef UNIX
|
#ifdef UNIX
|
||||||
{(char_u *)"yes", (char_u *)"auto"}
|
{(char_u *)"yes", (char_u *)"auto"}
|
||||||
#else
|
#else
|
||||||
@ -3526,6 +3527,7 @@ void check_buf_options(buf_T *buf)
|
|||||||
check_string_option(&buf->b_p_dict);
|
check_string_option(&buf->b_p_dict);
|
||||||
check_string_option(&buf->b_p_tsr);
|
check_string_option(&buf->b_p_tsr);
|
||||||
check_string_option(&buf->b_p_lw);
|
check_string_option(&buf->b_p_lw);
|
||||||
|
check_string_option(&buf->b_p_bkc);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -3782,14 +3784,24 @@ did_set_string_option (
|
|||||||
redraw_later_clear();
|
redraw_later_clear();
|
||||||
}
|
}
|
||||||
/* 'backupcopy' */
|
/* 'backupcopy' */
|
||||||
else if (varp == &p_bkc) {
|
else if (gvarp == &p_bkc) {
|
||||||
if (opt_strings_flags(p_bkc, p_bkc_values, &bkc_flags, TRUE) != OK)
|
char_u *bkc = p_bkc;
|
||||||
|
unsigned int *flags = &bkc_flags;
|
||||||
|
|
||||||
|
if (opt_flags & OPT_LOCAL) {
|
||||||
|
bkc = curbuf->b_p_bkc;
|
||||||
|
flags = &curbuf->b_bkc_flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (opt_strings_flags(bkc, p_bkc_values, flags, TRUE) != OK) {
|
||||||
errmsg = e_invarg;
|
errmsg = e_invarg;
|
||||||
if (((bkc_flags & BKC_AUTO) != 0)
|
}
|
||||||
+ ((bkc_flags & BKC_YES) != 0)
|
|
||||||
+ ((bkc_flags & BKC_NO) != 0) != 1) {
|
if (((*flags & BKC_AUTO) != 0)
|
||||||
|
+ ((*flags & BKC_YES) != 0)
|
||||||
|
+ ((*flags & BKC_NO) != 0) != 1) {
|
||||||
/* Must have exactly one of "auto", "yes" and "no". */
|
/* Must have exactly one of "auto", "yes" and "no". */
|
||||||
(void)opt_strings_flags(oldval, p_bkc_values, &bkc_flags, TRUE);
|
(void)opt_strings_flags(oldval, p_bkc_values, flags, TRUE);
|
||||||
errmsg = e_invarg;
|
errmsg = e_invarg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -6518,6 +6530,10 @@ void unset_global_local_option(char *name, void *from)
|
|||||||
case PV_AR:
|
case PV_AR:
|
||||||
buf->b_p_ar = -1;
|
buf->b_p_ar = -1;
|
||||||
break;
|
break;
|
||||||
|
case PV_BKC:
|
||||||
|
clear_string_option(&buf->b_p_bkc);
|
||||||
|
buf->b_bkc_flags = 0;
|
||||||
|
break;
|
||||||
case PV_TAGS:
|
case PV_TAGS:
|
||||||
clear_string_option(&buf->b_p_tags);
|
clear_string_option(&buf->b_p_tags);
|
||||||
break;
|
break;
|
||||||
@ -6581,6 +6597,7 @@ static char_u *get_varp_scope(struct vimoption *p, int opt_flags)
|
|||||||
case PV_STL: return (char_u *)&(curwin->w_p_stl);
|
case PV_STL: return (char_u *)&(curwin->w_p_stl);
|
||||||
case PV_UL: return (char_u *)&(curbuf->b_p_ul);
|
case PV_UL: return (char_u *)&(curbuf->b_p_ul);
|
||||||
case PV_LW: return (char_u *)&(curbuf->b_p_lw);
|
case PV_LW: return (char_u *)&(curbuf->b_p_lw);
|
||||||
|
case PV_BKC: return (char_u *)&(curbuf->b_p_bkc);
|
||||||
}
|
}
|
||||||
return NULL; /* "cannot happen" */
|
return NULL; /* "cannot happen" */
|
||||||
}
|
}
|
||||||
@ -6610,6 +6627,8 @@ static char_u *get_varp(struct vimoption *p)
|
|||||||
? (char_u *)&(curbuf->b_p_ar) : p->var;
|
? (char_u *)&(curbuf->b_p_ar) : p->var;
|
||||||
case PV_TAGS: return *curbuf->b_p_tags != NUL
|
case PV_TAGS: return *curbuf->b_p_tags != NUL
|
||||||
? (char_u *)&(curbuf->b_p_tags) : p->var;
|
? (char_u *)&(curbuf->b_p_tags) : p->var;
|
||||||
|
case PV_BKC: return *curbuf->b_p_bkc != NUL
|
||||||
|
? (char_u *)&(curbuf->b_p_bkc) : p->var;
|
||||||
case PV_DEF: return *curbuf->b_p_def != NUL
|
case PV_DEF: return *curbuf->b_p_def != NUL
|
||||||
? (char_u *)&(curbuf->b_p_def) : p->var;
|
? (char_u *)&(curbuf->b_p_def) : p->var;
|
||||||
case PV_INC: return *curbuf->b_p_inc != NUL
|
case PV_INC: return *curbuf->b_p_inc != NUL
|
||||||
@ -6975,6 +6994,8 @@ void buf_copy_options(buf_T *buf, int flags)
|
|||||||
* are not copied, start using the global value */
|
* are not copied, start using the global value */
|
||||||
buf->b_p_ar = -1;
|
buf->b_p_ar = -1;
|
||||||
buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
|
buf->b_p_ul = NO_LOCAL_UNDOLEVEL;
|
||||||
|
buf->b_p_bkc = empty_option;
|
||||||
|
buf->b_bkc_flags = 0;
|
||||||
buf->b_p_gp = empty_option;
|
buf->b_p_gp = empty_option;
|
||||||
buf->b_p_mp = empty_option;
|
buf->b_p_mp = empty_option;
|
||||||
buf->b_p_efm = empty_option;
|
buf->b_p_efm = empty_option;
|
||||||
@ -8116,3 +8137,10 @@ static bool briopt_check(win_T *wp)
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the local or global value of 'backupcopy'.
|
||||||
|
///
|
||||||
|
/// @param buf The buffer.
|
||||||
|
unsigned int get_bkc_value(buf_T *buf)
|
||||||
|
{
|
||||||
|
return buf->b_bkc_flags ? buf->b_bkc_flags : bkc_flags;
|
||||||
|
}
|
||||||
|
@ -292,7 +292,7 @@ EXTERN char_u *p_bs; /* 'backspace' */
|
|||||||
EXTERN char_u *p_bg; /* 'background' */
|
EXTERN char_u *p_bg; /* 'background' */
|
||||||
EXTERN int p_bk; /* 'backup' */
|
EXTERN int p_bk; /* 'backup' */
|
||||||
EXTERN char_u *p_bkc; /* 'backupcopy' */
|
EXTERN char_u *p_bkc; /* 'backupcopy' */
|
||||||
EXTERN unsigned bkc_flags;
|
EXTERN unsigned int bkc_flags; ///< flags from 'backupcopy'
|
||||||
#ifdef IN_OPTION_C
|
#ifdef IN_OPTION_C
|
||||||
static char *(p_bkc_values[]) =
|
static char *(p_bkc_values[]) =
|
||||||
{"yes", "auto", "no", "breaksymlink", "breakhardlink", NULL};
|
{"yes", "auto", "no", "breaksymlink", "breakhardlink", NULL};
|
||||||
@ -643,6 +643,7 @@ enum {
|
|||||||
BV_AI = 0
|
BV_AI = 0
|
||||||
, BV_AR
|
, BV_AR
|
||||||
, BV_BH
|
, BV_BH
|
||||||
|
, BV_BKC
|
||||||
, BV_BT
|
, BV_BT
|
||||||
, BV_EFM
|
, BV_EFM
|
||||||
, BV_GP
|
, BV_GP
|
||||||
|
@ -281,7 +281,7 @@ static int included_patches[] = {
|
|||||||
//459 NA
|
//459 NA
|
||||||
//458,
|
//458,
|
||||||
//457,
|
//457,
|
||||||
//456,
|
456,
|
||||||
455,
|
455,
|
||||||
454,
|
454,
|
||||||
//453 NA
|
//453 NA
|
||||||
|
Loading…
Reference in New Issue
Block a user