Mercurial > vim
changeset 3894:f69321485951 v7.3.703
updated for version 7.3.703
Problem: When 'undofile' is reset the hash is computed unnecessarily.
Solution: Only compute the hash when the option was set. (Christian Brabandt)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Sun, 21 Oct 2012 03:46:05 +0200 |
parents | c3036f1dca68 |
children | 6abf54f12abc |
files | src/option.c src/version.c |
diffstat | 2 files changed, 25 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/option.c +++ b/src/option.c @@ -7573,24 +7573,30 @@ set_bool_option(opt_idx, varp, value, op /* '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 and the buffer was - * loaded. */ - if ((curbuf == save_curbuf + /* Only take action when the option was set. When reset we do not + * delete the undo file, the option may be set again without making + * any changes in between. */ + if (curbuf->b_p_udf || 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, the buffer wasn't changed and the buffer was + * loaded */ + if ((curbuf == save_curbuf || (opt_flags & OPT_GLOBAL) || opt_flags == 0) - && !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL) - { - u_compute_hash(hash); - u_read_undo(NULL, hash, curbuf->b_fname); - } - } - curbuf = save_curbuf; + && !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL) + { + u_compute_hash(hash); + u_read_undo(NULL, hash, curbuf->b_fname); + } + } + curbuf = save_curbuf; + } } #endif