aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2015-07-18 21:52:17 +0300
committerZyX <kp-pav@yandex.ru>2015-10-08 22:00:12 +0300
commitf10960869f2c33812f00083e9584dc8ca16738f2 (patch)
tree34a7d5ce150db1b0c2f34aeafbb1fe29f93b9dd0
parent9d2615df86dadee9f441b280b067897b29a12878 (diff)
downloadrneovim-f10960869f2c33812f00083e9584dc8ca16738f2.tar.gz
rneovim-f10960869f2c33812f00083e9584dc8ca16738f2.tar.bz2
rneovim-f10960869f2c33812f00083e9584dc8ca16738f2.zip
shada: Do not save search pattern/sub string when it is older
-rw-r--r--src/nvim/shada.c37
1 files changed, 31 insertions, 6 deletions
diff --git a/src/nvim/shada.c b/src/nvim/shada.c
index af01fad744..44ee47f87f 100644
--- a/src/nvim/shada.c
+++ b/src/nvim/shada.c
@@ -1021,6 +1021,16 @@ static void shada_read(ShaDaReadDef *const sd_reader, const int flags)
break;
}
case kSDItemSearchPattern: {
+ if (!force) {
+ SearchPattern pat;
+ (cur_entry.data.search_pattern.is_substitute_pattern
+ ? &get_substitute_pattern
+ : &get_search_pattern)(&pat);
+ if (pat.pat != NULL && pat.timestamp >= cur_entry.timestamp) {
+ shada_free_shada_entry(&cur_entry);
+ break;
+ }
+ }
(cur_entry.data.search_pattern.is_substitute_pattern
? &set_substitute_pattern
: &set_search_pattern)((SearchPattern) {
@@ -1046,6 +1056,14 @@ static void shada_read(ShaDaReadDef *const sd_reader, const int flags)
break;
}
case kSDItemSubString: {
+ if (!force) {
+ SubReplacementString sub;
+ sub_get_replacement(&sub);
+ if (sub.sub != NULL && sub.timestamp >= cur_entry.timestamp) {
+ shada_free_shada_entry(&cur_entry);
+ break;
+ }
+ }
sub_set_replacement((SubReplacementString) {
.sub = cur_entry.data.sub_string.sub,
.timestamp = cur_entry.timestamp,
@@ -1679,6 +1697,10 @@ static void shada_write(ShaDaWriteDef *const sd_writer,
ShaDaReadDef *const sd_reader)
FUNC_ATTR_NONNULL_ARG(1)
{
+ // TODO(ZyX-I): Write only one search pattern, substitute search pattern and
+ // substitute replacement string, which has the greatest timestamp. Make sure
+ // that this also applies if ShaDa file contains more then one replacement
+ // string.
khash_t(bufset) *const removable_bufs = kh_init(bufset);
int max_kbyte_i = get_shada_parameter('s');
if (max_kbyte_i < 0) {
@@ -1886,13 +1908,16 @@ static void shada_write(ShaDaWriteDef *const sd_writer,
{
SubReplacementString sub;
sub_get_replacement(&sub);
- ShadaEntry sub_entry = (ShadaEntry) {
- .type = kSDItemSubString,
- .timestamp = sub.timestamp,
+ wms->replacement = (PossiblyFreedShadaEntry) {
+ .can_free_entry = false,
.data = {
- .sub_string = {
- .sub = (char *) sub.sub,
- .additional_elements = sub.additional_elements,
+ .type = kSDItemSubString,
+ .timestamp = sub.timestamp,
+ .data = {
+ .sub_string = {
+ .sub = (char *) sub.sub,
+ .additional_elements = sub.additional_elements,
+ }
}
}
};