]> granicus.if.org Git - vim/commitdiff
patch 8.0.0149: :earlier does not work after reading the undo file v8.0.0149
authorBram Moolenaar <Bram@vim.org>
Sat, 7 Jan 2017 15:14:57 +0000 (16:14 +0100)
committerBram Moolenaar <Bram@vim.org>
Sat, 7 Jan 2017 15:14:57 +0000 (16:14 +0100)
Problem:    ":earlier" and ":later" do not work after startup or reading the
            undo file.
Solution:   Use absolute time stamps instead of relative to the Vim start
            time. (Christian Brabandt, Pavel Juhas, closes #1300, closes
            #1254)

src/testdir/test_undo.vim
src/undo.c
src/version.c

index fb1cdc836af1b52c5ed77cb60b2c56bbbf7fb0bf..f2ac6a8eabeef4f39c0be2044dd9db7a51bb4b88 100644 (file)
@@ -235,3 +235,31 @@ func Test_insert_expr()
 
   close!
 endfunc
+
+func Test_undofile_earlier()
+  " Issue #1254
+  " create undofile with timestamps older than Vim startup time.
+  let t0 = localtime() - 43200
+  call test_settime(t0)
+  new Xfile
+  call feedkeys("ione\<Esc>", 'xt')
+  set ul=100
+  call test_settime(t0 + 1)
+  call feedkeys("otwo\<Esc>", 'xt')
+  set ul=100
+  call test_settime(t0 + 2)
+  call feedkeys("othree\<Esc>", 'xt')
+  set ul=100
+  w
+  wundo Xundofile
+  bwipe!
+  " restore normal timestamps.
+  call test_settime(0)
+  new Xfile
+  rundo Xundofile
+  earlier 1d
+  call assert_equal('', getline(1))
+  bwipe!
+  call delete('Xfile')
+  call delete('Xundofile')
+endfunc
index 57c3c2021d8d0577d22fe0d47ece248c8dfd63a3..607f35fdd861e71c222d5aca0c8f0aa0263b54a3 100644 (file)
@@ -2298,10 +2298,8 @@ undo_time(
     }
     else
     {
-       /* When doing computations with time_t subtract starttime, because
-        * time_t converted to a long may result in a wrong number. */
        if (dosec)
-           target = (long)(curbuf->b_u_time_cur - starttime) + step;
+           target = (long)(curbuf->b_u_time_cur) + step;
        else if (dofile)
        {
            if (step < 0)
@@ -2350,7 +2348,7 @@ undo_time(
        else
        {
            if (dosec)
-               closest = (long)(vim_time() - starttime + 1);
+               closest = (long)(vim_time() + 1);
            else if (dofile)
                closest = curbuf->b_u_save_nr_last + 2;
            else
@@ -2388,7 +2386,7 @@ undo_time(
        {
            uhp->uh_walk = mark;
            if (dosec)
-               val = (long)(uhp->uh_time - starttime);
+               val = (long)(uhp->uh_time);
            else if (dofile)
                val = uhp->uh_save_nr;
            else
index b49f01f7f265b0464531cfa8efc35821e74e248a..7b47461cac332e6f145a80d93465528b275a9b1f 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    149,
 /**/
     148,
 /**/