mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-06-13 04:56:30 +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:
parent
c35a561a9c
commit
d0fe73c5fb
|
@ -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
|
||||
|
|
17
Src/hist.c
17
Src/hist.c
|
@ -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 */
|
||||
/*
|
||||
|
|
Loading…
Reference in New Issue