patch 8.0.0149: :earlier does not work after reading the undo file
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)
diff --git a/src/testdir/test_undo.vim b/src/testdir/test_undo.vim
index fb1cdc8..f2ac6a8 100644
--- a/src/testdir/test_undo.vim
+++ b/src/testdir/test_undo.vim
@@ -235,3 +235,31 @@
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
diff --git a/src/undo.c b/src/undo.c
index 57c3c20..607f35f 100644
--- a/src/undo.c
+++ b/src/undo.c
@@ -2298,10 +2298,8 @@
}
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 @@
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 @@
{
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
diff --git a/src/version.c b/src/version.c
index b49f01f..7b47461 100644
--- a/src/version.c
+++ b/src/version.c
@@ -765,6 +765,8 @@
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 149,
+/**/
148,
/**/
147,