1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2024-05-20 06:56:05 +02:00

31815: another fix for INCAPPENDHISTORY change.

We need to save immediately if something is pushed on the history stack
to ensure we use the right file before popping.
This commit is contained in:
Peter Stephenson 2013-10-11 11:13:03 +01:00
parent c35a561a9c
commit d0fe73c5fb
2 changed files with 20 additions and 2 deletions

View File

@ -1,3 +1,8 @@
2013-10-11 Peter Stephenson <p.stephenson@samsung.com>
* 31815: Src/hist.c: more fallout from 31789: we need to save
using pushed history file before we pop.
2013-10-10 Peter Stephenson <p.stephenson@samsung.com>
* 31810: Test/E02xtrace.ztst: tests for simple cases of XTRACE

View File

@ -937,12 +937,21 @@ hbegin(int dohist)
/*
* For INCAPPENDHISTORY, when interactive, save the history here
* as it gives a better estimate of the times of commands.
*
* If SHAREHISTORY is also set continue to do so in the
* standard place, because that's safer about reading and
* rewriting history atomically.
*
* The histsave_stack_pos test won't usually fail here.
* We need to test the opposite for the hend() case because we
* need to save in the history file we've switched to, but then
* we pop immediately after that so the variable becomes zero.
* We will already have saved the line and restored the history
* so that (correctly) nothing happens here. But it shows
* I thought about it.
*/
if (isset(INCAPPENDHISTORY) && !isset(SHAREHISTORY) &&
!(histactive & HA_NOINC) && !strin)
!(histactive & HA_NOINC) && !strin && histsave_stack_pos == 0)
savehistfile(hf, 0, HFILE_USE_OPTIONS | HFILE_FAST);
}
@ -1348,7 +1357,11 @@ hend(Eprog prog)
chline = hptr = NULL;
chwords = NULL;
histactive = 0;
if (isset(SHAREHISTORY) && histfileIsLocked())
/*
* For normal INCAPPENDHISTORY case and reasoning, see hbegin().
*/
if (isset(SHAREHISTORY) ? histfileIsLocked() :
(isset(INCAPPENDHISTORY) && histsave_stack_pos != 0))
savehistfile(hf, 0, HFILE_USE_OPTIONS | HFILE_FAST);
unlockhistfile(hf); /* It's OK to call this even if we aren't locked */
/*