From: Bram Moolenaar Date: Wed, 4 Jan 2012 18:34:37 +0000 (+0100) Subject: updated for version 7.3.392 X-Git-Tag: v7.3.392 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=374d32d70f880651aa5e73371a38c5d0a9ccfaf0;p=vim updated for version 7.3.392 Problem: When setting 'undofile' while the file is already loaded but unchanged, try reading the undo file. (Andy Wokula) Solution: Compute a checksum of the text when 'undofile' is set. (Christian Brabandt) --- diff --git a/src/option.c b/src/option.c index 65c53ce56..f6ed2d370 100644 --- a/src/option.c +++ b/src/option.c @@ -7516,6 +7516,30 @@ set_bool_option(opt_idx, varp, value, opt_flags) compatible_set(); } +#ifdef FEAT_PERSISTENT_UNDO + /* 'undofile' */ + else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf) + { + char_u hash[UNDO_HASH_SIZE]; + buf_T *save_curbuf = curbuf; + + for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next) + { + /* When 'undofile' is set globally: for every buffer, otherwise + * only for the current buffer: Try to read in the undofile, if + * one exists and the buffer wasn't changed. */ + if ((curbuf == save_curbuf + || (opt_flags & OPT_GLOBAL) || opt_flags == 0) + && !curbufIsChanged()) + { + u_compute_hash(hash); + u_read_undo(NULL, hash, curbuf->b_fname); + } + } + curbuf = save_curbuf; + } +#endif + /* 'list', 'number' */ else if ((int *)varp == &curwin->w_p_list || (int *)varp == &curwin->w_p_nu diff --git a/src/testdir/test72.in b/src/testdir/test72.in index 6acb6d8f4..220adad67 100644 --- a/src/testdir/test72.in +++ b/src/testdir/test72.in @@ -51,6 +51,12 @@ dd:set ul=100 :e Xtestfile uuu:w >>test.out :" +:" Test that reading the undofiles when setting undofile works +:set noundofile ul=0 +i +u:e! Xtestfile +:set undofile ul=100 +uuuuuu:w >>test.out :" And now with encryption, cryptmethod=zip :e! Xtestfile :set undofile cm=zip diff --git a/src/testdir/test72.ok b/src/testdir/test72.ok index 44210c942..bb267d0d8 100644 --- a/src/testdir/test72.ok +++ b/src/testdir/test72.ok @@ -7,6 +7,16 @@ seven eight nine ten +one +two +three +four +five +six +seven +eight +nine +ten monday wednesday thursday diff --git a/src/version.c b/src/version.c index d8cf62cf4..fea42774b 100644 --- a/src/version.c +++ b/src/version.c @@ -714,6 +714,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 392, /**/ 391, /**/