Accepting request 1100325 from shells
- Extend tcsh-6.24.10-history-merge.dif * Add a test case - Modify tcsh-6.24.10-history-merge.dif * Skip workaround but disable fastMergeErase instead to really be able to merge currently history with history file (bsc#1213484) OBS-URL: https://build.opensuse.org/request/show/1100325 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/tcsh?expand=0&rev=94
This commit is contained in:
commit
54fc3d0bfb
@ -1,60 +1,87 @@
|
|||||||
---
|
---
|
||||||
sh.hist.c | 22 +++++++++++++++++-----
|
sh.hist.c | 5 +++--
|
||||||
1 file changed, 17 insertions(+), 5 deletions(-)
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
--- sh.hist.c
|
--- sh.hist.c
|
||||||
+++ sh.hist.c 2023-07-13 09:18:13.149624778 +0000
|
+++ sh.hist.c 2023-07-21 12:21:55.518480015 +0000
|
||||||
@@ -105,7 +105,7 @@ hremove(struct Hist *hp)
|
@@ -64,7 +64,7 @@ static void hfree (struct Hist *);
|
||||||
|
|
||||||
/* Prune length of history list to specified size by history variable. */
|
/* #define DEBUG_HIST 1 */
|
||||||
PG_STATIC void
|
|
||||||
-discardExcess(int hlen)
|
-static const int fastMergeErase = 1;
|
||||||
+discardExcess(int hlen, int mflg)
|
+static int fastMergeErase = 1;
|
||||||
{
|
static unsigned histCount = 0; /* number elements on history list */
|
||||||
struct Hist *hp, *np;
|
static int histlen = 0;
|
||||||
if (histTail == NULL) {
|
static struct Hist *histTail = NULL; /* last element on history list */
|
||||||
@@ -116,13 +116,13 @@ discardExcess(int hlen)
|
@@ -1321,6 +1321,7 @@ rechist(Char *xfname, int ref)
|
||||||
* the list is still too long scan the whole list as before. But only do a
|
|
||||||
* full scan if the list is more than 6% (1/16th) too long. */
|
|
||||||
while (histCount > (unsigned)hlen && (np = Histlist.Hnext)) {
|
|
||||||
- if (eventno - np->Href >= hlen || hlen == 0)
|
|
||||||
+ if ((eventno - np->Href >= hlen || hlen == 0) && !mflg)
|
|
||||||
hremove(np), hfree(np);
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
while (histCount > (unsigned)hlen && (np = histTail) != &Histlist) {
|
|
||||||
- if (eventno - np->Href >= hlen || hlen == 0)
|
|
||||||
+ if (eventno - np->Href >= hlen || hlen == 0 || mflg)
|
|
||||||
hremove(np), hfree(np);
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
@@ -148,7 +148,7 @@ savehist(
|
|
||||||
return;
|
|
||||||
if (sp)
|
|
||||||
(void) enthist(++eventno, sp, 1, mflg, histlen);
|
|
||||||
- discardExcess(histlen);
|
|
||||||
+ discardExcess(histlen, mflg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define USE_JENKINS_HASH 1
|
if (merge) {
|
||||||
@@ -1404,6 +1404,18 @@ loadhist(Char *fname, int mflg)
|
+ fastMergeErase = 0; /* Was true, now false to merge even with full history list */
|
||||||
void
|
jmp_buf_t osetexit;
|
||||||
sethistory(int n)
|
if (lock) {
|
||||||
{
|
#ifndef WINNT_NATIVE
|
||||||
+ int mflg = 0;
|
@@ -1393,7 +1394,7 @@ loadhist(Char *fname, int mflg)
|
||||||
+ struct varent *shist;
|
/* During history merging (enthist sees mflg set), we disable management of
|
||||||
|
* Hnum and Href (because fastMergeErase is true). So now reset all the
|
||||||
|
* values based on the final ordering of the history list. */
|
||||||
|
- if (mflg) {
|
||||||
|
+ if (mflg /* && fastMergeErase */) {
|
||||||
|
int n = eventno;
|
||||||
|
struct Hist *hp = &Histlist;
|
||||||
|
while ((hp = hp->Hnext))
|
||||||
|
--- tests/history.at
|
||||||
|
+++ tests/history.at 2023-07-24 07:53:41.471413277 +0000
|
||||||
|
@@ -218,6 +218,52 @@ dnl savehist) set to 0 instead of 1.
|
||||||
|
|
||||||
|
AT_CLEANUP()
|
||||||
|
|
||||||
|
+AT_SETUP([History merge])
|
||||||
|
+dnl Check if history merge really works out
|
||||||
+
|
+
|
||||||
+ if ((shist = adrof(STRsavehist)) != NULL && shist->vec != NULL) {
|
+AT_DATA([hist-merge.csh],
|
||||||
+ size_t i;
|
+[[set histfile=test.history histdup=prev history=(6 "%h TIME %R\n")
|
||||||
+ for (i = 1; shist->vec[i]; i++) {
|
+set savehist=(6 merge)
|
||||||
+ if (eq(shist->vec[i], STRmerge)) {
|
+printf "'%s' %s\n" "$histdup" "$history"
|
||||||
+ mflg++;
|
+history -c
|
||||||
+ break;
|
+: 1
|
||||||
+ }
|
+: 2
|
||||||
+ }
|
+: 3
|
||||||
+ }
|
+: 4
|
||||||
histlen = n;
|
+: 5
|
||||||
- discardExcess(histlen);
|
+history -S
|
||||||
+ discardExcess(histlen, mflg);
|
+: a
|
||||||
}
|
+: b
|
||||||
|
+: c
|
||||||
|
+: d
|
||||||
|
+: e
|
||||||
|
+history -S
|
||||||
|
+history -L
|
||||||
|
+history 6
|
||||||
|
+]])
|
||||||
|
+
|
||||||
|
+AT_CHECK([tcsh -f -q -i < hist-merge.csh], ,
|
||||||
|
+[> 'prev' 6 %h TIME %R\n
|
||||||
|
+ 24 TIME : b
|
||||||
|
+ 25 TIME : c
|
||||||
|
+ 26 TIME : d
|
||||||
|
+ 27 TIME : e
|
||||||
|
+ 28 TIME history -S
|
||||||
|
+ 29 TIME history 6
|
||||||
|
+> exit
|
||||||
|
+],)
|
||||||
|
+
|
||||||
|
+dnl In broken case we see the former history instead
|
||||||
|
+dnl > 'prev' 6 %h TIME %R\n
|
||||||
|
+dnl 24 TIME : 4
|
||||||
|
+dnl 25 TIME : 3
|
||||||
|
+dnl 26 TIME : 2
|
||||||
|
+dnl 27 TIME : 1
|
||||||
|
+dnl 28 TIME history -S
|
||||||
|
+dnl 29 TIME history 6
|
||||||
|
+dnl > exit
|
||||||
|
+
|
||||||
|
+AT_CLEANUP()
|
||||||
|
|
||||||
|
dnl
|
||||||
|
dnl History faults
|
||||||
|
13
tcsh.changes
13
tcsh.changes
@ -1,3 +1,16 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Jul 24 08:12:01 UTC 2023 - Dr. Werner Fink <werner@suse.de>
|
||||||
|
|
||||||
|
- Extend tcsh-6.24.10-history-merge.dif
|
||||||
|
* Add a test case
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Fri Jul 21 09:19:02 UTC 2023 - Dr. Werner Fink <werner@suse.de>
|
||||||
|
|
||||||
|
- Modify tcsh-6.24.10-history-merge.dif
|
||||||
|
* Skip workaround but disable fastMergeErase instead to really be
|
||||||
|
able to merge currently history with history file (bsc#1213484)
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Fri Jul 14 11:29:02 UTC 2023 - Dr. Werner Fink <werner@suse.de>
|
Fri Jul 14 11:29:02 UTC 2023 - Dr. Werner Fink <werner@suse.de>
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user