From 301c4f73aa8b81c34e3e9c886905ad67fad4537f Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Mon, 20 Oct 2025 23:42:45 -0700 Subject: [PATCH 1/6] Adjustments to GITFNS prc status is C if changes requested, prc comparison runs in its own process, initial changes for gwc to treat the clone as UNIX, not DSK, so branch-switching doesn't cause files from other branches to pile up. --- lispusers/GITFNS | 140 ++++++++++++++++++++---------------------- lispusers/GITFNS.LCOM | Bin 51521 -> 51703 bytes 2 files changed, 68 insertions(+), 72 deletions(-) diff --git a/lispusers/GITFNS b/lispusers/GITFNS index aed605330..f912c1200 100644 --- a/lispusers/GITFNS +++ b/lispusers/GITFNS @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "23-Sep-2025 21:43:21" {WMEDLEY}GITFNS.;551 134847 +(FILECREATED "20-Oct-2025 18:11:24" {WMEDLEY}GITFNS.;557 134663 :EDIT-BY rmk - :CHANGES-TO (FNS GIT-GET-DIFFERENT-FILES) + :CHANGES-TO (FNS GIT-MAKE-PROJECT GIT-PULL-REQUESTS) - :PREVIOUS-DATE "22-Sep-2025 12:52:41" {WMEDLEY}GITFNS.;550) + :PREVIOUS-DATE "14-Oct-2025 11:57:49" {WMEDLEY}GITFNS.;555) (PRETTYCOMPRINT GITFNSCOMS) @@ -135,7 +135,8 @@ (DEFINEQ (GIT-CLONEP - [LAMBDA (HOST/DIR NOERROR CHECKANCESTORS) (* ; "Edited 1-Oct-2023 18:09 by rmk") + [LAMBDA (HOST/DIR NOERROR CHECKANCESTORS) (* ; "Edited 14-Oct-2025 11:55 by rmk") + (* ; "Edited 1-Oct-2023 18:09 by rmk") (* ; "Edited 12-May-2022 11:44 by rmk") (* ; "Edited 8-May-2022 16:24 by rmk") @@ -143,7 +144,7 @@ (IF [AND HOST/DIR (LET [(D (SLASHIT (TRUEFILENAME (PACKFILENAME.STRING 'BODY HOST/DIR 'HOST - 'DSK] + 'UNIX] (IF (DIRECTORYNAMEP (CONCAT D "/.git/")) THEN D ELSEIF (AND CHECKANCESTORS (FIND-ANCESTOR-DIRECTORY @@ -169,6 +170,8 @@ (GIT-MAKE-PROJECT [LAMBDA (PROJECTNAME CLONEPATH WORKINGPATH EXCLUSIONS DEFAULTSUBDIRS) + (* ; "Edited 20-Oct-2025 18:10 by rmk") + (* ; "Edited 14-Oct-2025 11:51 by rmk") (* ; "Edited 1-Oct-2023 19:33 by rmk") (* ; "Edited 30-Mar-2023 09:06 by rmk") (* ; "Edited 5-Feb-2023 12:43 by rmk") @@ -222,7 +225,7 @@ (ERROR (CONCAT "Can't find a clone directory for " PROJECTNAME)) (PRINTOUT T "Note: Can't find a clone directory for " PROJECTNAME T))) - elseif (GIT-CLONEP [SLASHIT (PACKFILENAME 'HOST 'DSK 'DIRECTORY + elseif (GIT-CLONEP [SLASHIT (PACKFILENAME 'HOST 'UNIX 'DIRECTORY (UNPACKFILENAME.STRING (TRUEFILENAME CLONEPATH) 'DIRECTORY @@ -234,7 +237,7 @@ (LET (GITIGNORE PROJECT WP) (CL:WHEN (SETQ GITIGNORE (INFILEP (PACKFILENAME.STRING 'NAME ".gitignore" 'BODY CLONEPATH))) - (SETQ GITIGNORE (CL:WITH-OPEN-FILE (STREAM GITIGNORE) + (SETQ GITIGNORE (CL:WITH-OPEN-FILE (STREAM GITIGNORE :EXTERNAL-FORMAT :UTF-8) (bind L until (EOFP STREAM) while (SETQ L (CL:READ-LINE STREAM :EOF-ERROR-P NIL :EOF-VALUE NIL)) @@ -1431,43 +1434,31 @@ WHENSELECTEDFN _ (FUNCTION GIT-BRANCH-WHENSELECTEDFN)))]) (GIT-BRANCH-WHENSELECTEDFN - [LAMBDA (ITEM MENU BUTTON) (* ; "Edited 21-Mar-2025 19:07 by rmk") + [LAMBDA (ITEM MENU BUTTON) (* ; "Edited 2-Oct-2025 23:08 by rmk") + (* ; "Edited 30-Sep-2025 14:58 by rmk") + (* ; "Edited 21-Mar-2025 19:07 by rmk") (* ; "Edited 11-May-2024 11:05 by rmk") (* ; "Edited 1-May-2024 18:17 by rmk") (* ; "CAR is git key, 4th is project") - (* ;; "This executes the comparison in the current TTY window, either by stuffing the command there or by evaluating there. There probably should be a check to make sure that the TTY is in fact an executive--if not, maybe this should be a no-op. Better than getting the comparison form in the middle of anther SEDIT or TEDIT.") - (* ;; "This could also execute in the mouse process, where the menu is clicked. But in that case a terminal window pops up with the header lines of the compare, and that seems a nuisance.") (LET [(PR (CAR (LAST ITEM] - (if [AND NIL (PROGN (GETMOUSESTATE) - (EQ 'MIDDLE (DECODEBUTTONS] - then (LET [(POS (ADD1 (STRPOS "#" (CAR ITEM] - (ShellBrowse (fetch PRURL of PR))) - elseif (PROGN T) - then - (* ;; "PROGN because DWIM is screwed up") - - (* ;; "The COPYINSERT causes the compare to run in the TTY process, by stuffing the characters in the input line. Somehow it executes even if the parens are not there, but that looks funny. But it also works if I stuff the parens on both sides.") - - (if (EQ BUTTON 'MIDDLE) - then (ShellOpen (CONCAT "https://github.com/Interlisp/medley/pull/" - (fetch (PULLREQUEST PRNUMBER) of PR))) - else (BKSYSBUF '%() - [COPYINSERT `(GIT-PR-COMPARE ,(CADR ITEM) - ',(fetch PRPROJECT of PR] - (BKSYSBUF '%))) + (if (EQ BUTTON 'MIDDLE) + then (ShellOpen (CONCAT "https://github.com/Interlisp/medley/pull/" (fetch (PULLREQUEST + PRNUMBER) + of PR))) else - (* ;; "This puts the print out after the next event number in the TTY window, unfortunately. We go to the default font so we don't get TTYIN's input bold for this.") + (* ;; "This prints notices in its own TTY window") - (PROCESS.EVAL (TTY.PROCESS) - `(RESETLST - [RESETSAVE (DSPFONT DEFAULTFONT T) - '(PROGN (DSPFONT OLDVALUE T])]) + (ADD.PROCESS `[GIT-PR-COMPARE ,(CADR ITEM) + ',(fetch PRPROJECT of PR] + 'NAME + 'prc]) (GIT-PULL-REQUESTS - [LAMBDA (INCLUDEDRAFTS PROJECT) (* ; "Edited 9-May-2025 11:39 by rmk") + [LAMBDA (INCLUDEDRAFTS PROJECT) (* ; "Edited 20-Oct-2025 10:22 by rmk") + (* ; "Edited 9-May-2025 11:39 by rmk") (* ; "Edited 20-May-2024 22:12 by rmk") (* ; "Edited 13-May-2024 18:59 by rmk") (* ; "Edited 11-May-2024 10:51 by rmk") @@ -1495,9 +1486,11 @@ PRDESCRIPTION _ (JSON-GET JSOBJ 'title) PRSTATUS _ (CL:IF DRAFT 'D - (CL:IF (STREQUAL "REVIEW¬REQUIRED" - (JSON-GET JSOBJ 'reviewDecision)) - " " + (SELECTQ (MKATOM (JSON-GET JSOBJ 'reviewDecision)) + (CHANGES¬REQUESTED + 'C) + (REVIEW¬REQUIRED + " ") 'A)) PRPROJECT _ PROJECT PRURL _ (JSON-GET JSOBJ 'url) @@ -1842,7 +1835,8 @@ (LIST DIR1 DIR2 MAPPINGS))]) (GIT-BRANCHES-COMPARE-DIRECTORIES - [LAMBDA (BRANCH1 BRANCH2 LOCAL PROJECT) (* ; "Edited 12-Jun-2024 22:52 by mth") + [LAMBDA (BRANCH1 BRANCH2 LOCAL PROJECT) (* ; "Edited 2-Oct-2025 23:12 by rmk") + (* ; "Edited 12-Jun-2024 22:52 by mth") (* ; "Edited 10-Jun-2024 18:42 by mth") (* ; "Edited 1-May-2024 14:58 by rmk") (* ; "Edited 26-Sep-2023 22:40 by rmk") @@ -1860,8 +1854,10 @@ (SHORT2 (GIT-SHORT-BRANCH-NAME BRANCH2))) (PRINTOUT T "Comparing all " (L-CASE (fetch PROJECTNAME of PROJECT) T) - " subdirectories of " SHORT1 " and " SHORT2 T) - (PRINTOUT T "Fetching differences" T) + " subdirectories of" T) + (PRINTOUT T 5 .FONT BOLDFONT SHORT1 .FONT DEFAULTFONT " and " .FONT BOLDFONT SHORT2 .FONT + DEFAULTFONT T) + (PRINTOUT T "Fetching differences") (SETQ DIRS (GIT-GET-DIFFERENT-FILES BRANCH1 BRANCH2 NIL NIL PROJECT)) (SETQ MAPPINGS (CADDR DIRS)) (if DIRS @@ -1874,10 +1870,10 @@ '(> < ~= -* *-) '(*.* *>*.* .* *>.*) (GIT-GET-PROJECT PROJECT 'EXCLUSIONS) - NIL NIL NIL NIL (LIST (PACKFILENAME 'HOST NIL 'BODY - (CAR DIRS)) - (PACKFILENAME 'HOST NIL 'BODY - (CADR DIRS] + NIL NIL NIL NIL (LIST (FILENAMEFIELD (CAR DIRS) + 'DIRECTORY) + (FILENAMEFIELD (CADR DIRS) + 'DIRECTORY] (* ;; "We know that both sides come from Unix/unversioned, even if they have been copied into versioned FROMGIT, so we make a pass to remove the misleading versions.") @@ -2439,33 +2435,33 @@ (PUTPROPS GITFNS FILETYPE :TCOMPL) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4193 20772 (GIT-CLONEP 4203 . 5531) (GIT-INIT 5533 . 6163) (GIT-MAKE-PROJECT 6165 . -13830) (GIT-GET-PROJECT 13832 . 15757) (GIT-PUT-PROJECT-FIELD 15759 . 17400) (GIT-PROJECT-PATH 17402 - . 18446) (FIND-ANCESTOR-DIRECTORY 18448 . 18797) (GIT-FIND-CLONE 18799 . 19880) (GIT-MAINBRANCH 19882 - . 20277) (GIT-MAINBRANCH? 20279 . 20770)) (26235 31164 (PRC-COMMAND 26245 . 31162)) (31220 34008 ( -ALLSUBDIRS 31230 . 32516) (MEDLEYSUBDIRS 32518 . 33211) (GITSUBDIRS 33213 . 34006)) (34009 38799 ( -TOGIT 34019 . 35425) (FROMGIT 35427 . 36408) (GIT-DELETE-FILE 36410 . 37256) (MYMEDLEY-DELETE-FILES -37258 . 38797)) (38800 41803 (MYMEDLEYSUBDIR 38810 . 39266) (GITSUBDIR 39268 . 39711) (STRIPDIR 39713 - . 40084) (STRIPHOST 40086 . 40326) (STRIPNAME 40328 . 41081) (STRIPWHERE 41083 . 41801)) (41804 43706 - (GFILE4MFILE 41814 . 42177) (MFILE4GFILE 42179 . 42748) (GIT-REPO-FILENAME 42750 . 43704)) (43755 -54010 (GIT-COMMIT 43765 . 44591) (GIT-PUSH 44593 . 45353) (GIT-PULL 45355 . 46107) (GIT-APPROVAL 46109 - . 46458) (GIT-GET-FILE 46460 . 48375) (GIT-FILE-EXISTS? 48377 . 48651) (GIT-REMOTE-UPDATE 48653 . -49488) (GIT-REMOTE-ADD 49490 . 49797) (GIT-FILE-DATE 49799 . 50846) (GIT-FILE-HISTORY 50848 . 52782) ( -GIT-PRINT-FILE-HISTORY 52784 . 53834) (GIT-FETCH 53836 . 54008)) (54040 65378 (GIT-BRANCH-DIFF 54050 - . 60797) (GIT-COMMIT-DIFFS 60799 . 61690) (GIT-BRANCH-RELATIONS 61692 . 65376)) (65423 84918 ( -GIT-BRANCH-NUM 65433 . 66006) (GIT-CHECKOUT 66008 . 67294) (GIT-WHICH-BRANCH 67296 . 67703) ( -GIT-MAKE-BRANCH 67705 . 70284) (GIT-BRANCHES 70286 . 72881) (GIT-BRANCH-EXISTS? 72883 . 73754) ( -GIT-PICK-BRANCH 73756 . 74246) (GIT-BRANCH-MENU 74248 . 75129) (GIT-BRANCH-WHENSELECTEDFN 75131 . -77670) (GIT-PULL-REQUESTS 77672 . 81299) (GIT-SHORT-BRANCH-NAME 81301 . 81592) (GIT-LONG-NAME 81594 . -81911) (GIT-PRC-BRANCHES 81913 . 84916)) (84948 88396 (GIT-MY-CURRENT-BRANCH 84958 . 85328) ( -GIT-MY-BRANCHP 85330 . 85948) (GIT-MY-NEXT-BRANCH 85950 . 86444) (GIT-MY-BRANCHES 86446 . 88394)) ( -88442 92517 (GIT-ADD-WORKTREE 88452 . 90059) (GIT-REMOVE-WORKTREE 90061 . 90991) (GIT-LIST-WORKTREES -90993 . 91797) (WORKTREEDIR 91799 . 92515)) (92565 126387 (GIT-GET-DIFFERENT-FILES 92575 . 99428) ( -GIT-BRANCHES-COMPARE-DIRECTORIES 99430 . 106661) (GIT-WORKING-COMPARE-DIRECTORIES 106663 . 112370) ( -GIT-COMPARE-WORKTREE 112372 . 116350) (GITCDOBJBUTTONFN 116352 . 120842) (GIT-CD-LABELFN 120844 . -121926) (GIT-CD-MENUFN 121928 . 124368) (GIT-WORKING-COMPARE-FILES 124370 . 124990) ( -GIT-BRANCHES-COMPARE-FILES 124992 . 126156) (GIT-PR-COMPARE 126158 . 126385)) (126457 134780 (CDGITDIR - 126467 . 127154) (GIT-COMMAND 127156 . 128714) (GITORIGIN 128716 . 129413) (GIT-INITIALS 129415 . -129719) (GIT-COMMAND-TO-FILE 129721 . 133206) (GIT-RESULT-TO-LINES 133208 . 134113) (STRIPLOCAL 134115 - . 134778))))) + (FILEMAP (NIL (4204 21136 (GIT-CLONEP 4214 . 5652) (GIT-INIT 5654 . 6284) (GIT-MAKE-PROJECT 6286 . +14194) (GIT-GET-PROJECT 14196 . 16121) (GIT-PUT-PROJECT-FIELD 16123 . 17764) (GIT-PROJECT-PATH 17766 + . 18810) (FIND-ANCESTOR-DIRECTORY 18812 . 19161) (GIT-FIND-CLONE 19163 . 20244) (GIT-MAINBRANCH 20246 + . 20641) (GIT-MAINBRANCH? 20643 . 21134)) (26599 31528 (PRC-COMMAND 26609 . 31526)) (31584 34372 ( +ALLSUBDIRS 31594 . 32880) (MEDLEYSUBDIRS 32882 . 33575) (GITSUBDIRS 33577 . 34370)) (34373 39163 ( +TOGIT 34383 . 35789) (FROMGIT 35791 . 36772) (GIT-DELETE-FILE 36774 . 37620) (MYMEDLEY-DELETE-FILES +37622 . 39161)) (39164 42167 (MYMEDLEYSUBDIR 39174 . 39630) (GITSUBDIR 39632 . 40075) (STRIPDIR 40077 + . 40448) (STRIPHOST 40450 . 40690) (STRIPNAME 40692 . 41445) (STRIPWHERE 41447 . 42165)) (42168 44070 + (GFILE4MFILE 42178 . 42541) (MFILE4GFILE 42543 . 43112) (GIT-REPO-FILENAME 43114 . 44068)) (44119 +54374 (GIT-COMMIT 44129 . 44955) (GIT-PUSH 44957 . 45717) (GIT-PULL 45719 . 46471) (GIT-APPROVAL 46473 + . 46822) (GIT-GET-FILE 46824 . 48739) (GIT-FILE-EXISTS? 48741 . 49015) (GIT-REMOTE-UPDATE 49017 . +49852) (GIT-REMOTE-ADD 49854 . 50161) (GIT-FILE-DATE 50163 . 51210) (GIT-FILE-HISTORY 51212 . 53146) ( +GIT-PRINT-FILE-HISTORY 53148 . 54198) (GIT-FETCH 54200 . 54372)) (54404 65742 (GIT-BRANCH-DIFF 54414 + . 61161) (GIT-COMMIT-DIFFS 61163 . 62054) (GIT-BRANCH-RELATIONS 62056 . 65740)) (65787 84526 ( +GIT-BRANCH-NUM 65797 . 66370) (GIT-CHECKOUT 66372 . 67658) (GIT-WHICH-BRANCH 67660 . 68067) ( +GIT-MAKE-BRANCH 68069 . 70648) (GIT-BRANCHES 70650 . 73245) (GIT-BRANCH-EXISTS? 73247 . 74118) ( +GIT-PICK-BRANCH 74120 . 74610) (GIT-BRANCH-MENU 74612 . 75493) (GIT-BRANCH-WHENSELECTEDFN 75495 . +77034) (GIT-PULL-REQUESTS 77036 . 80907) (GIT-SHORT-BRANCH-NAME 80909 . 81200) (GIT-LONG-NAME 81202 . +81519) (GIT-PRC-BRANCHES 81521 . 84524)) (84556 88004 (GIT-MY-CURRENT-BRANCH 84566 . 84936) ( +GIT-MY-BRANCHP 84938 . 85556) (GIT-MY-NEXT-BRANCH 85558 . 86052) (GIT-MY-BRANCHES 86054 . 88002)) ( +88050 92125 (GIT-ADD-WORKTREE 88060 . 89667) (GIT-REMOVE-WORKTREE 89669 . 90599) (GIT-LIST-WORKTREES +90601 . 91405) (WORKTREEDIR 91407 . 92123)) (92173 126203 (GIT-GET-DIFFERENT-FILES 92183 . 99036) ( +GIT-BRANCHES-COMPARE-DIRECTORIES 99038 . 106477) (GIT-WORKING-COMPARE-DIRECTORIES 106479 . 112186) ( +GIT-COMPARE-WORKTREE 112188 . 116166) (GITCDOBJBUTTONFN 116168 . 120658) (GIT-CD-LABELFN 120660 . +121742) (GIT-CD-MENUFN 121744 . 124184) (GIT-WORKING-COMPARE-FILES 124186 . 124806) ( +GIT-BRANCHES-COMPARE-FILES 124808 . 125972) (GIT-PR-COMPARE 125974 . 126201)) (126273 134596 (CDGITDIR + 126283 . 126970) (GIT-COMMAND 126972 . 128530) (GITORIGIN 128532 . 129229) (GIT-INITIALS 129231 . +129535) (GIT-COMMAND-TO-FILE 129537 . 133022) (GIT-RESULT-TO-LINES 133024 . 133929) (STRIPLOCAL 133931 + . 134594))))) STOP diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM index c371224649445a68d0e22b0ce0b136c3e641e883..e8842524d6184606f5d3051b161c9a64341a3ce1 100644 GIT binary patch delta 2023 zcmZuy+i%-c9Io50?XnGx-6^pBX6=$xIQX37OB}{D*LGU3j-A;~TSVEqwJ9s?rgWnn z6$I@MfWeUfsV@^xJb<(*LPChC+5lkf+b_!vJqH<)=<7wHpd*P5(Xz7D~9Fn7GTDkDLWUm~_6utB2Z0N{Ro|U#F7?a^J&Y3mUGLAS6+Y1TroMft4}BjCKQ_Pa zJ0b{Q^56UO!dLvzfFyju!+|qf=U?o?U;5a>o0um2`vI|khkxYmod;WaX7h&)MTV!t zif39jXhs1lrZqMMS^>StsoKG45XBf$umayQ(bZU|M@4T#4`bkjVGx2w3!QG&(4p!_ zo*9k0F{n7I?S_a&5I*OdWd}0`g*dD_$qBbIssZJ(C=OkJ1XQYn3yQX=X|Do&!q3fMPW+Nd-^}3KX5m z*a>~plS)BYHe-H&>q2_q{P}H995Wb*uZf`P8i*5#B_J-NRST`Wg83w-6hxT2T*s$I zbP&SiI`N2W_4{m@Z0cd+yR@cF_?L02ua-xWTI(0Co zQ@B!}!I>dF8O4B8)c|>;koHa`D=1gY(BTiJR)m-M$_uXwKk+@MpE|1e=>(Z%?9Itz zHjRIIZ#A{IceO%3dHVgvKfjfaOx^yYE6bP$cpjC|1x5`(>l0wOrM4%lZI9y7v~skd z!^tS{r4c6vs;@O@6cE8m5CO$O*E>+pYXQ*{pw0d`D5D@1zI5is7}D(0wTtI!b)X2} zwfY612)YSWmLZXjGx1TPCZv!J1Xp3<^`L?^YWgEil$KCvNli2O?&-Om6fr!Eh)}~o zc+g`0&FP~V6)`Jf$OvDZezKp+dIqb_zo)zRD8qqgmjXYA66jz%C9~?q?YIC)n=f)l3Ek3q*Vq`weUD$MfeoF$! z>iB$$&FW~|PCU|fE+^%--)VB!n)t27eSCFsx9}_fX7SMOu@oA}GlgFA2jNC}l;fz~oMW{I?)?cusJ}4R0W~ zVsjYql4wuG?_Y1!6so}N{M=lvUb{3?TL1-LUyp%l$!M)_4Z~})#S;ol)!RPm38|Ot z*0Lqf9Co}CVxj2BtCml7${V*1HcVN@1yPl(-gn~0^dDX}b{0P5MpfCfn z@`eR1=Y)oM8e9q%@n!>{Lph>AyQh>-r02qgsY$^xKaEuEln ykWAU3{16NsPoAlhAIf2#K=wEsgV&!039C{LrO59tKh{I2!oOWU(EMxJE&mHX;`tQ- delta 1886 zcmZuyU2GIp6z;T8+O<@$pI@P&%<jXKHp|1p+y(spNm~$+ z&!qTt9KZ~0qikEi(pG`BGpXbNosuSQrW;(Uv38yh8Ib zxp@URvHly!xDG3vs9)=t=Q>2HvWHuKPu}EHl|9wDC$Wb+KjH4zf9@RSxNq3s+p^qu zY@|!zzGhQhC)!VRvmbEs68ocz-!|wC-@E&$pAB?>v@VJ8Vo-7o(*iY@gOXuRjDV`4 z71|ZcANRvDPAQnaXBucKQqxC9tHp;(UkgVs}gPvWz1hB;5 zmuwGYO=AyMch&EvcD4`Vq2j)m0{;l^hH*s58>4;@f64Cm>|y=eYjHu@o7)Eu<|N?X z;6YVY;3wlZ0sacU5ywHvlQa4xFk2Cv*u^>Ykj0{IBKC(g~8z&J= zzgRK?8)O1QY4*(QZEl*~nZ3;Y!ZOES=zsovyq%Y9nu^V2U{{a7yZ&fvad_slKikq0 z(V=VyrN99R4}))yfFz0=7LD7VU{q5#EfJ1{z86afsIuuGD}X&J`5`J(Z}AXwk0%6M zgHGM{(Td>$(RB9Si5t(U3M{RjI~CPXcoMAE&H~X@FmPRFr%x{SiCFC+tS!Yt@c5$& zWxt+0kdhSO^Ef3k+c~#)FVV$RvQAWNQ!FHV^5X!vLVj6wWv;z{H?poQj0T2hjti!B z%y26L6h^>-Q$0|Psfpc^B0 zC#S@%_5)|k@j$|3p(Mu2<7g5vtVyeiajleQ~MR#2Ymh`ljkA2K^5Z_pW(!HdREh{TuWlGGVF919{Y06G8bm$U~4? zO;E&r5=QCThJlAn5ca|4>ye~OuuxrGjB3%+e6#`*UJ#GxAW1Rb8WNTy3XNV;kSJ;< z=_}HgHUwf?f@_T0ZUIY2RA|~16J7dp-?|}+B0=(?41H@F4Fbu{Ms&S_5KN_kXgb(a zrdtUe-wQLTG{{KmwAhl^N(M3dKTJ{-NSpZoGgpfsjG|1UExaOk83bGv5W=(Yh3LZknd;K%*5r85 b@dAUnr3D<37Cfx1viGk(%|ZRnRj2qb8>!P& From 7ce5eebb9dc86d86f561325eef1e14995c8608e5 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 22 Oct 2025 08:35:07 -0700 Subject: [PATCH 2/6] Better interpretation of git-copy --- lispusers/GITFNS | 225 ++++++++++++++++++++++-------------------- lispusers/GITFNS.LCOM | Bin 51703 -> 51710 bytes 2 files changed, 117 insertions(+), 108 deletions(-) diff --git a/lispusers/GITFNS b/lispusers/GITFNS index f912c1200..19d9fc898 100644 --- a/lispusers/GITFNS +++ b/lispusers/GITFNS @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "20-Oct-2025 18:11:24" {WMEDLEY}GITFNS.;557 134663 +(FILECREATED "21-Oct-2025 18:31:43" {WMEDLEY}GITFNS.;559 134865 :EDIT-BY rmk - :CHANGES-TO (FNS GIT-MAKE-PROJECT GIT-PULL-REQUESTS) + :CHANGES-TO (FNS GIT-GET-DIFFERENT-FILES GIT-BRANCH-DIFF) - :PREVIOUS-DATE "14-Oct-2025 11:57:49" {WMEDLEY}GITFNS.;555) + :PREVIOUS-DATE "21-Oct-2025 14:12:21" {WMEDLEY}GITFNS.;558) (PRETTYCOMPRINT GITFNSCOMS) @@ -1083,6 +1083,8 @@ (GIT-BRANCH-DIFF [LAMBDA (BRANCH1 BRANCH2 PROJECT) + (* ;; "Edited 21-Oct-2025 18:31 by rmk") + (* ;; "Edited 10-Jun-2024 16:43 by mth") (* ;; "Edited 2-May-2024 11:28 by mth") @@ -1148,7 +1150,7 @@ (GO RETRY)) (ERROR "Incomplete branch differences" (LIST BRANCH1 BRANCH2))) else (for L in ELINES do (PRINTOUT T L T)))) - (RETURN (SORT (for (L FN) in RLINES + (RETURN (SORT (for L FN in RLINES collect (SELCHARQ (CHCON1 L) (A (CL:IF (EQ (CHARCODE TAB) (NTHCHARCODE L 2)) @@ -1159,13 +1161,14 @@ (LIST 'DELETED (SETQ FN (SUBSTRING L 3))) (ERROR "DELETED NOT RECOGNIZED" L))) (M (CL:IF (SETQ POS (STRPOS " " L)) - [LIST 'CHANGED (SETQ FN (SUBSTRING L (ADD1 POS] + [LIST 'MODIFIED (SETQ FN (SUBSTRING L (ADD1 POS] (ERROR "CHANGED NOT RECOGNIZED" L))) - (C (if (AND (EQ (CHARCODE TAB) + (C (* ; + "We coerce a copy to an ADD of the target file") + (if (AND (EQ (CHARCODE TAB) (NTHCHARCODE L 5)) (SETQ POS (STRPOS " " L 7))) - then (LIST 'COPIED (SETQ FN (SUBSTRING L 6 - (SUB1 POS))) + then (LIST 'ADDED (SETQ FN (SUBSTRING L (ADD1 POS))) (OR (FIXP (SUBATOM L 2 4)) (HELP "C without a number" L))) else (HELP "COPY NOT RECOGNIZED" L))) @@ -1726,6 +1729,8 @@ [LAMBDA (BRANCH1 BRANCH2 DIR1 DIR2 PROJECT) (DECLARE (USEDFREE FROMGITN)) + (* ;; "Edited 21-Oct-2025 18:30 by rmk") + (* ;; "Edited 23-Sep-2025 21:42 by rmk") (* ;; "Edited 22-Sep-2025 12:48 by rmk") @@ -1741,98 +1746,102 @@ (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) (SETQ BRANCH1 (GIT-BRANCH-EXISTS? BRANCH1 NIL PROJECT)) (SETQ BRANCH2 (GIT-BRANCH-EXISTS? BRANCH2 NIL PROJECT)) - (LET (MAPPINGS FROMGIT FROMGITDIR PRNAME (DIFFS (GIT-BRANCH-DIFF BRANCH1 BRANCH2 PROJECT))) - (CL:WHEN DIFFS - (SETQ FROMGIT (PACK* "{FROMGIT" (add FROMGITN 1) - "}")) - - (* ;; "If both origin/, strip it out of subdirectories") - - (SETQ PRNAME (MTOUSTRING (CL:IF (AND (STRPOS "origin/" BRANCH1 NIL T) - (STRPOS "origin/" BRANCH2 NIL T)) - (SUBSTRING BRANCH2 (CONSTANT (NCHARS "origin/ "))) - BRANCH2))) - (PSEUDOHOST FROMGIT (CONCAT "{DSK}" (fetch PROJECTNAME of PROJECT) - "-PR--" PRNAME "--" (DATE) - ">")) - (CL:UNLESS DIR1 - (SETQ DIR1 (CONCAT FROMGIT ""))) - (CL:UNLESS DIR2 - (SETQ DIR2 (CONCAT FROMGIT ""))) - (for D in DIFFS - do - (SELECTQ (CAR D) - (ADDED (* ; + (LET + (MAPPINGS FROMGIT FROMGITDIR PRNAME (DIFFS (GIT-BRANCH-DIFF BRANCH1 BRANCH2 PROJECT))) + (CL:WHEN DIFFS + (SETQ FROMGIT (PACK* "{FROMGIT" (add FROMGITN 1) + "}")) + + (* ;; "If both origin/, strip it out of subdirectories") + + (SETQ PRNAME (CL:IF (AND (STRPOS "origin/" BRANCH1 NIL T) + (STRPOS "origin/" BRANCH2 NIL T)) + (SUBSTRING BRANCH2 (CONSTANT (NCHARS "origin/ "))) + BRANCH2)) + (PSEUDOHOST FROMGIT (CONCAT "{DSK}" (fetch PROJECTNAME of PROJECT) + "-PR--" PRNAME "--" (DATE) + ">")) + (CL:UNLESS DIR1 + (SETQ DIR1 (CONCAT FROMGIT ""))) + (CL:UNLESS DIR2 + (SETQ DIR2 (CONCAT FROMGIT ""))) + (for D in DIFFS + do (SELECTQ (CAR D) + (ADDED (* ;  "Shouldn't exist in BRANCH2, should exist in BRANCH1, but maybe ADDED and DELETED are mixed up?") - (SETQ D (CADR D)) - (OR (GIT-GET-FILE BRANCH1 D (CONCAT DIR1 D) - T PROJECT) - (GIT-GET-FILE BRANCH2 D (CONCAT DIR2 D) - T PROJECT))) - (DELETED - (* ;; "Shouldn't exist in BRANCH1, should exist in BRANCH2. But maybe git is just confused in marking a file that exists in the wrong place as a delete instead of an add, or maybe it may think of a file that doesn't exist at all as having been deleted. Try for both, but don't cause an error.") - - (SETQ D (CADR D)) - (OR (GIT-GET-FILE BRANCH2 D (CONCAT DIR2 D) - T PROJECT) - (GIT-GET-FILE BRANCH1 D (CONCAT DIR1 D) - T PROJECT))) - (CHANGED (* ; "Should exist in both branches") + (SETQ D (CADR D)) + (OR (GIT-GET-FILE BRANCH1 D (CONCAT DIR1 D) + T PROJECT) + (GIT-GET-FILE BRANCH2 D (CONCAT DIR2 D) + T PROJECT))) + (DELETED + (* ;; "Shouldn't exist in BRANCH1, should exist in BRANCH2. But maybe git is just confused in marking a file that exists in the wrong place as a delete instead of an add, or maybe it may think of a file that doesn't exist at all as having been deleted. Try for both, but don't cause an error.") + + (SETQ D (CADR D)) + (OR (GIT-GET-FILE BRANCH2 D (CONCAT DIR2 D) + T PROJECT) + (GIT-GET-FILE BRANCH1 D (CONCAT DIR1 D) + T PROJECT))) + (MODIFIED (* ; "Should exist in both branches") (SETQ D (CADR D)) (GIT-GET-FILE BRANCH1 D (CONCAT DIR1 D) T PROJECT) (GIT-GET-FILE BRANCH2 D (CONCAT DIR2 D) T PROJECT)) - ((RENAMED COPIED) + ((RENAMED COPIED) (* ;; "These entries are from-to filename pairs. If (CADDR) is 100, only need to fetch one, because it presumably has disappeared in BRANCH2 and reappeared in BRANCH1. MAPPINGS is returned so the connection can be reestablished higher up. ") - - (* ;; "If renamed and then changed, for now treat as unrelated adds and deletes: put both files in the fromgit directory. Perhaps the mapping should still figure out how to relate them.") + + (* ;; "If renamed and then changed, for now treat as unrelated adds and deletes: put both files in the fromgit directory. Perhaps the mapping should still figure out how to relate them.") + + (* ;; "For copied files, presumably 2 files are exactly the same. But we hope we can show them on the same line, by virtue of the mapping.") - (* ;; "For copied files, presumably 2 files are exactly the same. But we hope we can show them on the same line, by virtue of the mapping.") + (* ;; + "GIT %"copy%" to a target file is coerced to ADDED of that target; the source is ignore") - [LET ((GFILE (CDR D)) - F1 F2) + (LET ((GFILE (CDR D)) + F1 F2) - (* ;; "GFILE is a triple (F2 F1 N )") + (* ;; "GFILE is a triple (F2 F1 N )") - (* ;; "F1 is the file in branch 1, if any, F2 is in branch 2") + (* ;; "F1 is the file in branch 1, if any, F2 is in branch 2") - (SETQ F1 (GIT-GET-FILE BRANCH1 (CADR GFILE) - (CONCAT DIR1 (CADR GFILE)) - T PROJECT)) - (SETQ F2 (GIT-GET-FILE BRANCH2 (CADR GFILE) - (CONCAT DIR2 (CADR GFILE)) - T PROJECT)) + (SETQ F1 (GIT-GET-FILE BRANCH1 (CADR GFILE) + (CONCAT DIR1 (CADR GFILE)) + T PROJECT)) + (SETQ F2 (GIT-GET-FILE BRANCH2 (CADR GFILE) + (CONCAT DIR2 (CADR GFILE)) + T PROJECT)) - (* ;; "Let the directories figure it out") + (* ;; "Let the directories figure it out") - (AND NIL (if (EQ (CADDR GFILE) - 100) - then + (AND NIL (if (EQ (CADDR GFILE) + 100) + then (* ;; "A little tricky to figure out what corresponds to the real file in the mapping, which directory it belongs to. Maybe the first one should always be one that exists, the second may just be a useful name. But we have to know whether to match against INFO1 or INFO2") - (HELP GFILE 100) - (push MAPPINGS - (LIST (LIST) - (FULLNAME F1) - (SLASHIT (U-CASE (CONCAT DIR2 - (CAR GFILE))) - T) - (NTHCHAR (CAR D) - 1) - 100)) - else - (* ;; + (HELP GFILE 100) + (push MAPPINGS + (LIST (LIST) + (FULLNAME F1) + (SLASHIT (U-CASE (CONCAT DIR2 (CAR GFILE)) + ) + T) + (NTHCHAR (CAR D) + 1) + 100)) + else + (* ;;  "If not a perfect match, then the directory should figure it out") - (GIT-GET-FILE BRANCH2 (CAR GFILE) - (CONCAT DIR2 (CAR GFILE)) - T PROJECT]) - (HELP "UNKNOWN GIT-DIFF TAG" D))) - (LIST DIR1 DIR2 MAPPINGS))]) + (GIT-GET-FILE BRANCH2 (CAR GFILE) + (CONCAT DIR2 (CAR GFILE)) + T PROJECT))) + F2)) + (HELP "UNKNOWN GIT-DIFF TAG" D))) + (LIST DIR1 DIR2 MAPPINGS))]) (GIT-BRANCHES-COMPARE-DIRECTORIES [LAMBDA (BRANCH1 BRANCH2 LOCAL PROJECT) (* ; "Edited 2-Oct-2025 23:12 by rmk") @@ -2435,33 +2444,33 @@ (PUTPROPS GITFNS FILETYPE :TCOMPL) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4204 21136 (GIT-CLONEP 4214 . 5652) (GIT-INIT 5654 . 6284) (GIT-MAKE-PROJECT 6286 . -14194) (GIT-GET-PROJECT 14196 . 16121) (GIT-PUT-PROJECT-FIELD 16123 . 17764) (GIT-PROJECT-PATH 17766 - . 18810) (FIND-ANCESTOR-DIRECTORY 18812 . 19161) (GIT-FIND-CLONE 19163 . 20244) (GIT-MAINBRANCH 20246 - . 20641) (GIT-MAINBRANCH? 20643 . 21134)) (26599 31528 (PRC-COMMAND 26609 . 31526)) (31584 34372 ( -ALLSUBDIRS 31594 . 32880) (MEDLEYSUBDIRS 32882 . 33575) (GITSUBDIRS 33577 . 34370)) (34373 39163 ( -TOGIT 34383 . 35789) (FROMGIT 35791 . 36772) (GIT-DELETE-FILE 36774 . 37620) (MYMEDLEY-DELETE-FILES -37622 . 39161)) (39164 42167 (MYMEDLEYSUBDIR 39174 . 39630) (GITSUBDIR 39632 . 40075) (STRIPDIR 40077 - . 40448) (STRIPHOST 40450 . 40690) (STRIPNAME 40692 . 41445) (STRIPWHERE 41447 . 42165)) (42168 44070 - (GFILE4MFILE 42178 . 42541) (MFILE4GFILE 42543 . 43112) (GIT-REPO-FILENAME 43114 . 44068)) (44119 -54374 (GIT-COMMIT 44129 . 44955) (GIT-PUSH 44957 . 45717) (GIT-PULL 45719 . 46471) (GIT-APPROVAL 46473 - . 46822) (GIT-GET-FILE 46824 . 48739) (GIT-FILE-EXISTS? 48741 . 49015) (GIT-REMOTE-UPDATE 49017 . -49852) (GIT-REMOTE-ADD 49854 . 50161) (GIT-FILE-DATE 50163 . 51210) (GIT-FILE-HISTORY 51212 . 53146) ( -GIT-PRINT-FILE-HISTORY 53148 . 54198) (GIT-FETCH 54200 . 54372)) (54404 65742 (GIT-BRANCH-DIFF 54414 - . 61161) (GIT-COMMIT-DIFFS 61163 . 62054) (GIT-BRANCH-RELATIONS 62056 . 65740)) (65787 84526 ( -GIT-BRANCH-NUM 65797 . 66370) (GIT-CHECKOUT 66372 . 67658) (GIT-WHICH-BRANCH 67660 . 68067) ( -GIT-MAKE-BRANCH 68069 . 70648) (GIT-BRANCHES 70650 . 73245) (GIT-BRANCH-EXISTS? 73247 . 74118) ( -GIT-PICK-BRANCH 74120 . 74610) (GIT-BRANCH-MENU 74612 . 75493) (GIT-BRANCH-WHENSELECTEDFN 75495 . -77034) (GIT-PULL-REQUESTS 77036 . 80907) (GIT-SHORT-BRANCH-NAME 80909 . 81200) (GIT-LONG-NAME 81202 . -81519) (GIT-PRC-BRANCHES 81521 . 84524)) (84556 88004 (GIT-MY-CURRENT-BRANCH 84566 . 84936) ( -GIT-MY-BRANCHP 84938 . 85556) (GIT-MY-NEXT-BRANCH 85558 . 86052) (GIT-MY-BRANCHES 86054 . 88002)) ( -88050 92125 (GIT-ADD-WORKTREE 88060 . 89667) (GIT-REMOVE-WORKTREE 89669 . 90599) (GIT-LIST-WORKTREES -90601 . 91405) (WORKTREEDIR 91407 . 92123)) (92173 126203 (GIT-GET-DIFFERENT-FILES 92183 . 99036) ( -GIT-BRANCHES-COMPARE-DIRECTORIES 99038 . 106477) (GIT-WORKING-COMPARE-DIRECTORIES 106479 . 112186) ( -GIT-COMPARE-WORKTREE 112188 . 116166) (GITCDOBJBUTTONFN 116168 . 120658) (GIT-CD-LABELFN 120660 . -121742) (GIT-CD-MENUFN 121744 . 124184) (GIT-WORKING-COMPARE-FILES 124186 . 124806) ( -GIT-BRANCHES-COMPARE-FILES 124808 . 125972) (GIT-PR-COMPARE 125974 . 126201)) (126273 134596 (CDGITDIR - 126283 . 126970) (GIT-COMMAND 126972 . 128530) (GITORIGIN 128532 . 129229) (GIT-INITIALS 129231 . -129535) (GIT-COMMAND-TO-FILE 129537 . 133022) (GIT-RESULT-TO-LINES 133024 . 133929) (STRIPLOCAL 133931 - . 134594))))) + (FILEMAP (NIL (4209 21141 (GIT-CLONEP 4219 . 5657) (GIT-INIT 5659 . 6289) (GIT-MAKE-PROJECT 6291 . +14199) (GIT-GET-PROJECT 14201 . 16126) (GIT-PUT-PROJECT-FIELD 16128 . 17769) (GIT-PROJECT-PATH 17771 + . 18815) (FIND-ANCESTOR-DIRECTORY 18817 . 19166) (GIT-FIND-CLONE 19168 . 20249) (GIT-MAINBRANCH 20251 + . 20646) (GIT-MAINBRANCH? 20648 . 21139)) (26604 31533 (PRC-COMMAND 26614 . 31531)) (31589 34377 ( +ALLSUBDIRS 31599 . 32885) (MEDLEYSUBDIRS 32887 . 33580) (GITSUBDIRS 33582 . 34375)) (34378 39168 ( +TOGIT 34388 . 35794) (FROMGIT 35796 . 36777) (GIT-DELETE-FILE 36779 . 37625) (MYMEDLEY-DELETE-FILES +37627 . 39166)) (39169 42172 (MYMEDLEYSUBDIR 39179 . 39635) (GITSUBDIR 39637 . 40080) (STRIPDIR 40082 + . 40453) (STRIPHOST 40455 . 40695) (STRIPNAME 40697 . 41450) (STRIPWHERE 41452 . 42170)) (42173 44075 + (GFILE4MFILE 42183 . 42546) (MFILE4GFILE 42548 . 43117) (GIT-REPO-FILENAME 43119 . 44073)) (44124 +54379 (GIT-COMMIT 44134 . 44960) (GIT-PUSH 44962 . 45722) (GIT-PULL 45724 . 46476) (GIT-APPROVAL 46478 + . 46827) (GIT-GET-FILE 46829 . 48744) (GIT-FILE-EXISTS? 48746 . 49020) (GIT-REMOTE-UPDATE 49022 . +49857) (GIT-REMOTE-ADD 49859 . 50166) (GIT-FILE-DATE 50168 . 51215) (GIT-FILE-HISTORY 51217 . 53151) ( +GIT-PRINT-FILE-HISTORY 53153 . 54203) (GIT-FETCH 54205 . 54377)) (54409 65889 (GIT-BRANCH-DIFF 54419 + . 61308) (GIT-COMMIT-DIFFS 61310 . 62201) (GIT-BRANCH-RELATIONS 62203 . 65887)) (65934 84673 ( +GIT-BRANCH-NUM 65944 . 66517) (GIT-CHECKOUT 66519 . 67805) (GIT-WHICH-BRANCH 67807 . 68214) ( +GIT-MAKE-BRANCH 68216 . 70795) (GIT-BRANCHES 70797 . 73392) (GIT-BRANCH-EXISTS? 73394 . 74265) ( +GIT-PICK-BRANCH 74267 . 74757) (GIT-BRANCH-MENU 74759 . 75640) (GIT-BRANCH-WHENSELECTEDFN 75642 . +77181) (GIT-PULL-REQUESTS 77183 . 81054) (GIT-SHORT-BRANCH-NAME 81056 . 81347) (GIT-LONG-NAME 81349 . +81666) (GIT-PRC-BRANCHES 81668 . 84671)) (84703 88151 (GIT-MY-CURRENT-BRANCH 84713 . 85083) ( +GIT-MY-BRANCHP 85085 . 85703) (GIT-MY-NEXT-BRANCH 85705 . 86199) (GIT-MY-BRANCHES 86201 . 88149)) ( +88197 92272 (GIT-ADD-WORKTREE 88207 . 89814) (GIT-REMOVE-WORKTREE 89816 . 90746) (GIT-LIST-WORKTREES +90748 . 91552) (WORKTREEDIR 91554 . 92270)) (92320 126405 (GIT-GET-DIFFERENT-FILES 92330 . 99238) ( +GIT-BRANCHES-COMPARE-DIRECTORIES 99240 . 106679) (GIT-WORKING-COMPARE-DIRECTORIES 106681 . 112388) ( +GIT-COMPARE-WORKTREE 112390 . 116368) (GITCDOBJBUTTONFN 116370 . 120860) (GIT-CD-LABELFN 120862 . +121944) (GIT-CD-MENUFN 121946 . 124386) (GIT-WORKING-COMPARE-FILES 124388 . 125008) ( +GIT-BRANCHES-COMPARE-FILES 125010 . 126174) (GIT-PR-COMPARE 126176 . 126403)) (126475 134798 (CDGITDIR + 126485 . 127172) (GIT-COMMAND 127174 . 128732) (GITORIGIN 128734 . 129431) (GIT-INITIALS 129433 . +129737) (GIT-COMMAND-TO-FILE 129739 . 133224) (GIT-RESULT-TO-LINES 133226 . 134131) (STRIPLOCAL 134133 + . 134796))))) STOP diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM index e8842524d6184606f5d3051b161c9a64341a3ce1..302b29a0092fc690f932bb2900578e65ebade30b 100644 GIT binary patch delta 1099 zcmZuw&rj4q6t)netQVq&1JTW+AqvD|XQrLD8xc!8yW0pmo3?8Jg9eenhGikJgcxJ+ zZ&SP)#qq<(zkO?R&l*_8Zus}WLQ{tn9p*dlJ=%p0L3ySs-G`Z ze_r~p)B`wW0V0}7^=Muiif+A2j@30rAeHyoO^+7>#kE5QGCq0~EroCjBUy+)OiE_$ zt5hAA7Hjt>wj}9G^zAz8+gm>&9^Rjb%^T@yG-i+X6+44-(TaW9Ryu>pdnM;^fBt~? zmwM{OrQXB+bTg-P@^q{>v#&45miK2@KPGA)Y)RTZLEc%|EEmhmDUcIj=mg}34&-LX}0+hGc?k;W0K*g=)USTzn;PCwHKcy7wwHN8V5$S#8Y#`}b zw7oH2d%JO4+SMBO(y-dzzIf+AL%7vlV$n{Hm}Z;PkJSj zl_gFe|1*)Z^=N`p5zc#JqC_{_b0%tQx`M#E$Y)b56c|}XV*y4I!=Pa^k}3mYyX31I lo7ZGOIu&qjVXLxKcZmUV9LB;bN(_(ydB2VksRfmng+CgA7Rvwt delta 1136 zcmZuw&u`N(6rPy|v|PqO6I{?+gkYP<7RQdAR{T&%-8Ng7lq7{Q@k0}v5ZV|MtHh0Q z;0}`oCj>~q9o7>k&ItYij-0rmfsnW%UfQitL=N$1zwi6rv!DG-_y5%W4`&ZpW^}D- z+LrAAb&Hf1ZN9N&5xMb%PRw}I%B;uHl=4%!u>wZ9QL6!!eyhDy?842tzwoe!c$VwSvAfkFA7Bv_Oqi@cye zlM&*y`gd)dB8#m@XVwV$qH`V{e08f2zi2q04R6R}J>`uLF7+;6()Ya+{$%eWEG+w5 zn^)gO!^;D0@p5i!v%1Y$-m@?Bo86Sxvk^JFt4p8uwZ3_TtbdIT9=kg9?)CS+QI|PT zRkb>}wgoDVqj&^d%LOl)ZX_y3%)pOA-%CNdZigzR14$a!qXZ;p+iSLjq;b|uqZyD? zWEd$ySOIDAzh=VaFu5%j!htZY`c*IXqmlx_c*jgow`(RWr}f+)*mab_MGyrWVikHb zssv6UtE?VmkV-(8u%h3qapLM9Y6SnoF-(J|iDF(&_s z*@YcXh7HSf>)nKQ!PyDguH7rNCGW<#`%jEp-57Sarx=@d6H@ft-VYU`3oVC1JyDHP zRE?4pD7x>ku=@5pp_IZ*iqEEfQFO3&Z(UMkwR_40>$aLvOp)~$J7_zoRyCDo*s{SZ zl~idgKMI_&tk=_FbRldPTMEi$NWF@Ij~;t{a`pCUgaU8G$(!?Q&BgYV+hAnN3`f)4 TkH{8?>al4erfzGl`LgjFk8T>} From b75c561d6052d32818c0a3bf0cb81f31ee1f607a Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 22 Oct 2025 08:35:36 -0700 Subject: [PATCH 3/6] COMPAREDIRECTORIES: don't fail on empty directory --- lispusers/COMPAREDIRECTORIES | 126 ++++++++++++++++-------------- lispusers/COMPAREDIRECTORIES.LCOM | Bin 41849 -> 41875 bytes 2 files changed, 66 insertions(+), 60 deletions(-) diff --git a/lispusers/COMPAREDIRECTORIES b/lispusers/COMPAREDIRECTORIES index 57e7feeaf..840c2d68d 100644 --- a/lispusers/COMPAREDIRECTORIES +++ b/lispusers/COMPAREDIRECTORIES @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "24-Aug-2025 13:38:35" {WMEDLEY}COMPAREDIRECTORIES.;268 133743 +(FILECREATED "22-Oct-2025 08:32:01" {WMEDLEY}COMPAREDIRECTORIES.;272 134315 :EDIT-BY rmk - :CHANGES-TO (FNS CDENTRIES.SELECT CDPRINT.LINE) + :CHANGES-TO (FNS COMPAREDIRECTORIES.INFOS.TYPE) - :PREVIOUS-DATE "26-Mar-2025 09:41:31" {WMEDLEY}COMPAREDIRECTORIES.;267) + :PREVIOUS-DATE "21-Oct-2025 14:36:51" {WMEDLEY}COMPAREDIRECTORIES.;271) (PRETTYCOMPRINT COMPAREDIRECTORIESCOMS) @@ -160,6 +160,8 @@ (COMPAREDIRECTORIES.INFOS [LAMBDA (DIR INCLUDEDFILES EXCLUDEDFILES ALLVERSIONS DEPTH USEDIRECTORYDATE INCLUDEAUTHOR) + (* ;; "Edited 21-Oct-2025 14:26 by rmk") + (* ;; "Edited 29-Sep-2023 17:25 by rmk") (* ;; "Edited 22-May-2022 14:17 by rmk") @@ -168,43 +170,45 @@ (* ;; "Each entry is a list of the form (matchname . CDINFOS). CDINFOS is guaranteed to be a singleton, unless ALLVERSIONS. ") - (FOR FULLNAME TYPE LDATE STREAM (STARTPOS _ (ADD1 (NCHARS DIR))) - IN (CDFILES DIR INCLUDEDFILES EXCLUDEDFILES ALLVERSIONS DEPTH) - COLLECT + (CL:WHEN (DIRECTORYNAMEP DIR) + [FOR FULLNAME TYPE LDATE STREAM (STARTPOS _ (ADD1 (NCHARS DIR))) + IN (CDFILES DIR INCLUDEDFILES EXCLUDEDFILES ALLVERSIONS DEPTH) + COLLECT - (* ;; "GDATE/IDATE in case Y2K") + (* ;; "GDATE/IDATE in case Y2K") - (SETQ STREAM (OPENSTREAM FULLNAME 'INPUT)) (* ; + (SETQ STREAM (OPENSTREAM FULLNAME 'INPUT)) (* ;  "So all the GETFILEINFO's, FILEDATES, etc. don't have to do the directory searching.") (* ;  "Is it a Lisp file? Get it's internal filecreated date. ") - (CL:MULTIPLE-VALUE-SETQ (TYPE LDATE) - (COMPAREDIRECTORIES.INFOS.TYPE STREAM)) - (PROG1 (LIST (MATCHNAME FULLNAME STARTPOS) - (CREATE CDINFO - FULLNAME _ (FULLNAME STREAM) - DATE _ (GDATE (IDATE (IF (OR USEDIRECTORYDATE (NULL LDATE)) - THEN (GETFILEINFO STREAM 'CREATIONDATE) - ELSE (SETFILEINFO STREAM 'CREATIONDATE LDATE) - LDATE))) - LENGTH _ (GETFILEINFO STREAM 'LENGTH) - AUTHOR _ (AND INCLUDEAUTHOR (GETFILEINFO STREAM 'AUTHOR)) - TYPE _ TYPE - EOL _ (EOLTYPE STREAM))) - (CLOSEF? STREAM)) - FINALLY - - (* ;; "Sort to get all entries with the same matchname adjacent. Presumably we would only need to collect multiples if ALLVERSIONS, but in a case-sensitive file system we might see files with names that differ in case. We have deliberately given them a case-insensitive matchname, so we can expose this issue in the display.") - - (* ;; "If we see (MN X)(MN Y), smash the Y in after the X") - - (RETURN (FOR ITAIL I VAL MN ON (SORT $$VAL T) - DO (SETQ I (CAR ITAIL)) - (SETQ MN (CAR I)) - [WHILE (EQ MN (CAADR ITAIL)) DO (POP ITAIL) - (PUSH (CDR I) - (CADR (CAR ITAIL] - (PUSH VAL I) FINALLY (RETURN (DREVERSE VAL]) + (CL:MULTIPLE-VALUE-SETQ (TYPE LDATE) + (COMPAREDIRECTORIES.INFOS.TYPE STREAM)) + (PROG1 (LIST (MATCHNAME FULLNAME STARTPOS) + (CREATE CDINFO + FULLNAME _ (FULLNAME STREAM) + DATE _ (GDATE (IDATE (IF (OR USEDIRECTORYDATE (NULL LDATE)) + THEN (GETFILEINFO STREAM 'CREATIONDATE) + ELSE (SETFILEINFO STREAM 'CREATIONDATE + LDATE) + LDATE))) + LENGTH _ (GETFILEINFO STREAM 'LENGTH) + AUTHOR _ (AND INCLUDEAUTHOR (GETFILEINFO STREAM 'AUTHOR)) + TYPE _ TYPE + EOL _ (EOLTYPE STREAM))) + (CLOSEF? STREAM)) + FINALLY + + (* ;; "Sort to get all entries with the same matchname adjacent. Presumably we would only need to collect multiples if ALLVERSIONS, but in a case-sensitive file system we might see files with names that differ in case. We have deliberately given them a case-insensitive matchname, so we can expose this issue in the display.") + + (* ;; "If we see (MN X)(MN Y), smash the Y in after the X") + + (RETURN (FOR ITAIL I VAL MN ON (SORT $$VAL T) + DO (SETQ I (CAR ITAIL)) + (SETQ MN (CAR I)) + [WHILE (EQ MN (CAADR ITAIL)) DO (POP ITAIL) + (PUSH (CDR I) + (CADR (CAR ITAIL] + (PUSH VAL I) FINALLY (RETURN (DREVERSE VAL])]) (COMPAREDIRECTORIES.CANDIDATES [LAMBDA (INFOS1 INFOS2) @@ -335,7 +339,9 @@ CDE]) (COMPAREDIRECTORIES.INFOS.TYPE - [LAMBDA (FILE) (* ; "Edited 28-Sep-2023 23:09 by rmk") + [LAMBDA (FILE) (* ; "Edited 22-Oct-2025 08:29 by rmk") + (* ; "Edited 20-Sep-2025 12:59 by rmk") + (* ; "Edited 28-Sep-2023 23:09 by rmk") (* ; "Edited 22-May-2022 14:27 by rmk") (* ; "Edited 25-Apr-2022 09:02 by rmk") (* ; "Edited 4-Jan-2022 13:10 by rmk") @@ -404,7 +410,8 @@ (DEFINEQ (CDFILES - [LAMBDA (DIR INCLUDEDFILES EXCLUDEDFILES ALLVERSIONS DEPTH)(* ; "Edited 17-Jun-2023 23:04 by rmk") + [LAMBDA (DIR INCLUDEDFILES EXCLUDEDFILES ALLVERSIONS DEPTH)(* ; "Edited 20-Oct-2025 23:25 by rmk") + (* ; "Edited 17-Jun-2023 23:04 by rmk") (* ; "Edited 3-Oct-2022 12:03 by rmk") (* ; "Edited 25-Apr-2022 08:42 by rmk") (* ; "Edited 5-Mar-2022 15:05 by rmk") @@ -426,8 +433,7 @@ (* ;; "EXCLUDEDFILES is a filepattern with * meaning everything, COM means *.LCOM and *.DFASL") - [SETQ EXCLUDEDFILES `(*>.DS_Store - ,@(MKLIST EXCLUDEDFILES] + [SETQ EXCLUDEDFILES `(*>.DS¬Store ,@(MKLIST EXCLUDEDFILES] (CL:UNLESS (EQMEMB '.* INCLUDEDFILES) (* ;  "Excluded dot files unless specifically asked for") [SETQ EXCLUDEDFILES `(.* ,@(MKLIST EXCLUDEDFILES]) @@ -2251,25 +2257,25 @@ (MOVD? 'NILL 'TEDIT.FILEDATE) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2673 23163 (COMPAREDIRECTORIES 2683 . 8018) (COMPAREDIRECTORIES.INFOS 8020 . 10978) ( -COMPAREDIRECTORIES.CANDIDATES 10980 . 14365) (CDENTRIES.SELECT 14367 . 19269) ( -COMPAREDIRECTORIES.INFOS.TYPE 19271 . 20397) (MATCHNAME 20399 . 21079) (CD.INSURECDVALUE 21081 . 22695 -) (CD.UPDATEWIDTHS 22697 . 23161)) (23164 33786 (CDFILES 23174 . 29188) (CDFILES.MATCH 29190 . 30815) -(CDFILES.PATS 30817 . 33784)) (33787 51805 (CDPRINT 33797 . 36314) (CDPRINT.HEADER 36316 . 37213) ( -CDPRINT.LINE 37215 . 40644) (CDPRINT.MAXWIDTHS 40646 . 44761) (CDPRINT.COLHEADERS 44763 . 46048) ( -CDPRINT.COLUMNS 46050 . 51170) (CDTEDIT 51172 . 51803)) (51806 60927 (CDMAP 51816 . 53248) (CDENTRY -53250 . 53559) (CDSUBSET 53561 . 55000) (CDMERGE 55002 . 58986) (CDMERGE.COMMON 58988 . 60303) ( -CD.SORT 60305 . 60925)) (60928 68466 (BINCOMP 60938 . 65227) (EOLTYPE 65229 . 67791) (EOLTYPE.SHOW -67793 . 68464)) (68994 81521 (FIND-UNCOMPILED-FILES 69004 . 72647) (FIND-UNSOURCED-FILES 72649 . 75033 -) (FIND-SOURCE-FILES 75035 . 76773) (FIND-COMPILED-FILES 76775 . 78652) (FIND-UNLOADED-FILES 78654 . -79507) (FIND-LOADED-FILES 79509 . 79937) (FIND-MULTICOMPILED-FILES 79939 . 81519)) (81522 89953 ( -CREATED-AS 81532 . 86329) (SOURCE-FOR-COMPILED-P 86331 . 89258) (COMPILE-SOURCE-DATE-DIFF 89260 . -89951)) (89954 100717 (FIX-DIRECTORY-DATES 89964 . 93414) (FIX-EQUIV-DATES 93416 . 94941) ( -COPY-COMPARED-FILES 94943 . 96764) (COPY-MISSING-FILES 96766 . 98923) (COMPILED-ON-SAME-SOURCE 98925 - . 100715)) (100911 108749 (CDBROWSER 100921 . 104848) (CDBROWSER.STRINGS 104850 . 108747)) (108911 -110647 (CD.TABLEITEM 108921 . 109141) (CD.TABLEITEM.PRINTFN 109143 . 109342) (CD.TABLEITEM.COPYFN -109344 . 110402) (CDTABLEBROWSER.HEADING.REPAINTFN 110404 . 110645)) (110648 133218 ( -CDTABLEBROWSER.WHENSELECTEDFN 110658 . 111126) (CD.COMMANDSELECTEDFN 111128 . 116229) (CD-MENUFN -116231 . 122457) (CD-COMPARE-FILES 122459 . 125811) (CDBROWSER-COPY 125813 . 129482) ( -CDBROWSER-DELETE-FILE 129484 . 132697) (CD-SWAPDIRS 132699 . 133216))))) + (FILEMAP (NIL (2673 23652 (COMPAREDIRECTORIES 2683 . 8018) (COMPAREDIRECTORIES.INFOS 8020 . 11249) ( +COMPAREDIRECTORIES.CANDIDATES 11251 . 14636) (CDENTRIES.SELECT 14638 . 19540) ( +COMPAREDIRECTORIES.INFOS.TYPE 19542 . 20886) (MATCHNAME 20888 . 21568) (CD.INSURECDVALUE 21570 . 23184 +) (CD.UPDATEWIDTHS 23186 . 23650)) (23653 34358 (CDFILES 23663 . 29760) (CDFILES.MATCH 29762 . 31387) +(CDFILES.PATS 31389 . 34356)) (34359 52377 (CDPRINT 34369 . 36886) (CDPRINT.HEADER 36888 . 37785) ( +CDPRINT.LINE 37787 . 41216) (CDPRINT.MAXWIDTHS 41218 . 45333) (CDPRINT.COLHEADERS 45335 . 46620) ( +CDPRINT.COLUMNS 46622 . 51742) (CDTEDIT 51744 . 52375)) (52378 61499 (CDMAP 52388 . 53820) (CDENTRY +53822 . 54131) (CDSUBSET 54133 . 55572) (CDMERGE 55574 . 59558) (CDMERGE.COMMON 59560 . 60875) ( +CD.SORT 60877 . 61497)) (61500 69038 (BINCOMP 61510 . 65799) (EOLTYPE 65801 . 68363) (EOLTYPE.SHOW +68365 . 69036)) (69566 82093 (FIND-UNCOMPILED-FILES 69576 . 73219) (FIND-UNSOURCED-FILES 73221 . 75605 +) (FIND-SOURCE-FILES 75607 . 77345) (FIND-COMPILED-FILES 77347 . 79224) (FIND-UNLOADED-FILES 79226 . +80079) (FIND-LOADED-FILES 80081 . 80509) (FIND-MULTICOMPILED-FILES 80511 . 82091)) (82094 90525 ( +CREATED-AS 82104 . 86901) (SOURCE-FOR-COMPILED-P 86903 . 89830) (COMPILE-SOURCE-DATE-DIFF 89832 . +90523)) (90526 101289 (FIX-DIRECTORY-DATES 90536 . 93986) (FIX-EQUIV-DATES 93988 . 95513) ( +COPY-COMPARED-FILES 95515 . 97336) (COPY-MISSING-FILES 97338 . 99495) (COMPILED-ON-SAME-SOURCE 99497 + . 101287)) (101483 109321 (CDBROWSER 101493 . 105420) (CDBROWSER.STRINGS 105422 . 109319)) (109483 +111219 (CD.TABLEITEM 109493 . 109713) (CD.TABLEITEM.PRINTFN 109715 . 109914) (CD.TABLEITEM.COPYFN +109916 . 110974) (CDTABLEBROWSER.HEADING.REPAINTFN 110976 . 111217)) (111220 133790 ( +CDTABLEBROWSER.WHENSELECTEDFN 111230 . 111698) (CD.COMMANDSELECTEDFN 111700 . 116801) (CD-MENUFN +116803 . 123029) (CD-COMPARE-FILES 123031 . 126383) (CDBROWSER-COPY 126385 . 130054) ( +CDBROWSER-DELETE-FILE 130056 . 133269) (CD-SWAPDIRS 133271 . 133788))))) STOP diff --git a/lispusers/COMPAREDIRECTORIES.LCOM b/lispusers/COMPAREDIRECTORIES.LCOM index 3a75fdb017a6d084baf809192b66a73b15c89fc4..91d4fc6e03fde34caeac9a532caa15d9feea5b24 100644 GIT binary patch delta 574 zcmZvYKX21O7{=pBsEQ;0h*m`^%Y!E@l*o5J=WKTX%f2L*9G~%BDk{1_%YcxWx-fNM zVrq?Nz5x?qMPh=_gjhHy1F7Jqd*8d~eV^y|>qo!+*}rjxGBd#F$zO|v#r`A?h_TQ< zwcI`@tG&LnbMyY~UT^2gpl8n4aCJD?w=N>2g;Zkt7$l+)ve3ts00|jpLU#u9aw9qCGDtMbWGvD`q?|c1^!O!o5FVBbJIJ>zT2YwKN@suYikJfJ= z-xrAs+X)U|gEWlR-$tu~r0z;mo}!9!jl5{PQfjX%CE?9GIMYQ{;ZW*%o&)>x;`;R^ z{`E{F-*N3n)6%$glxZsd`t%3O!N+Gc75&nBcqS4<%j1yupR5P;KOz@t+tIRY7HV7= zbK@<>^~L-B$o?b^S<0Eg>z`WgK*XE71LySC@XpD}=_WtBXRR3Ws!=q30+xiJrqVB3 z0*eJ^q_@zeoHk&B9oOLmvt2(HhA8(ZE}#xIfq$&=Ikwr!tR_qZ>P+YJ;jW4kysVd1 zsWf7a^?KOpSplL}eZDOktaTI1!>J)(oP)(-|7GyrpItAvNMQw4F$(qFs*+S2o u4lEL=NY3;eESO-ofwGZ%U=|%;m?2BqF0`?5?R@j~e0AG;wHb{*eEtoqTaxSm From 76b309038da9bfb3b0348e707b2ad746c42bd943 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 22 Oct 2025 13:21:15 -0700 Subject: [PATCH 4/6] Bug in slashit --- library/UNIXUTILS | 210 +++++++++++++++++++++------------------- library/UNIXUTILS.DFASL | Bin 7622 -> 7297 bytes 2 files changed, 109 insertions(+), 101 deletions(-) diff --git a/library/UNIXUTILS b/library/UNIXUTILS index 9bb94cb98..28ffedcfe 100644 --- a/library/UNIXUTILS +++ b/library/UNIXUTILS @@ -1,11 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "13-Nov-2023 12:57:10" {DSK}frank>il>medley>gmedley>library>UNIXUTILS.;26 16663 +(FILECREATED "22-Oct-2025 13:05:51" {WMEDLEY}UNIXUTILS.;33 17919 - :CHANGES-TO (FNS ShellBrowser) + :EDIT-BY rmk - :PREVIOUS-DATE "11-Nov-2023 09:06:39" {DSK}frank>il>medley>gmedley>library>UNIXUTILS.;25 -) + :CHANGES-TO (FNS SLASHIT) + + :PREVIOUS-DATE "27-Sep-2025 16:25:07" {WMEDLEY}UNIXUTILS.;32) (PRETTYCOMPRINT UNIXUTILSCOMS) @@ -146,7 +147,8 @@ "true"]) (ShellOpen - [LAMBDA (FilenameOrURL) + [LAMBDA (FilenameOrURL) (* ; "Edited 10-Sep-2025 15:29 by rmk") + (* ; "Edited 4-May-2025 11:14 by rmk") (* ;; "Open the file or URL using the generic %"opener%" for this machine via a shell call.") @@ -176,62 +178,56 @@ " >>/tmp/ShellBrowser-warnings-$$.txt")) T) else (CONCAT "Unable to find a browser to open: " FilenameOrURL))) - else - (LET* - ((OPENER (ShellOpener)) - (FULLNAME (FULLNAME FilenameOrURL))) - (if (NOT FULLNAME) - then (CONCAT "File not found: " FilenameOrURL) - elseif (STREQUAL OPENER "true") - then (CONCAT "Unable to find a file opener to open: " FilenameOrURL) - else (LET* ((VERSION.SPECIFIED (FILENAMEFIELD FilenameOrURL 'VERSION)) - (UNPACKED (UNPACKFILENAME.STRING FULLNAME)) - (NEWNAME (CONCAT (LISTGET UNPACKED 'NAME) - "~" - (LISTGET UNPACKED 'VERSION) - "~")) - (EXTENSION (LISTGET UNPACKED 'EXTENSION)) - [UNVERSIONED (LET (FN (UNPACKED (COPY UNPACKED))) - (LISTPUT UNPACKED 'VERSION NIL) - (LISTPUT UNPACKED 'HOST NIL) - (SETQ FN (PACKFILENAME.STRING UNPACKED)) - (if (STREQUAL (SUBSTRING FN -1) - ".") - then (SETQ FN (SUBSTRING UNIXFILE 1 -2))) - (SETQ FN (SLASHIT FN] - (UNVERSIONED.EXISTS (INFILEP (CONCAT "{UNIX}" UNVERSIONED))) - (TMPDIR (CONCAT "/tmp/" (RAND 1000 9999))) - (TARGETFILE.LISP (PACKFILENAME.STRING 'HOST "{UNIX}" 'DIRECTORY TMPDIR - 'NAME NEWNAME 'EXTENSION EXTENSION)) - (TARGETFILE.UNIX (SLASHIT (PACKFILENAME.STRING 'HOST NIL 'DIRECTORY TMPDIR - 'NAME NEWNAME 'EXTENSION EXTENSION))) - (UNIXFILE NIL)) - (DECLARE (SPECVARS UNIXFILE)) - (if (OR VERSION.SPECIFIED (NOT UNVERSIONED.EXISTS)) - then (COPYFILE FULLNAME TARGETFILE.LISP) - (SETQ UNIXFILE TARGETFILE.UNIX) - else (SETQ UNIXFILE UNVERSIONED)) - (CL:WITH-OPEN-STREAM - (SHELLSTREAM (OPENSTREAM (CONCAT "{CORE}SHELLOUT" (RAND 1000 9999)) - 'BOTH)) - (ShellCommand (CONCAT OPENER " '" UNIXFILE "'" - " >>/tmp/ShellOpener-warnings-$$.txt") - SHELLSTREAM) - (if (EQ (GETFILEPTR SHELLSTREAM) - 0) - then T - else (LET* ((OUTSTRING (ALLOCSTRING (GETFILEPTR SHELLSTREAM) - " "))) - (CL:WITH-OPEN-STREAM (STRINGSTREAM (OPENSTRINGSTREAM OUTSTRING - 'OUTPUT)) - (SETFILEPTR SHELLSTREAM 0) - (CL:TAGBODY [SETFILEINFO SHELLSTREAM 'ENDOFSTREAMOP - #'(CL:LAMBDA (s) - (GO OUT] - (CL:LOOP (PRINTCCODE (READCCODE SHELLSTREAM) - STRINGSTREAM)) - OUT)) - OUTSTRING]) + else (LET* ((OPENER (ShellOpener)) + (FULLNAME (FULLNAME FilenameOrURL))) + (if (NOT FULLNAME) + then (CONCAT "File not found: " FilenameOrURL) + elseif (STREQUAL OPENER "true") + then (CONCAT "Unable to find a file opener to open: " FilenameOrURL) + else (LET* ((VERSION.SPECIFIED (FILENAMEFIELD FilenameOrURL 'VERSION)) + (UNPACKED (UNPACKFILENAME.STRING FULLNAME)) + (NEWNAME (CONCAT (LISTGET UNPACKED 'NAME) + "~" + (LISTGET UNPACKED 'VERSION) + "~")) + (EXTENSION (LISTGET UNPACKED 'EXTENSION)) + [UNVERSIONED (LET (FN (UNPACKED (COPY UNPACKED))) + (LISTPUT UNPACKED 'VERSION NIL) + (LISTPUT UNPACKED 'HOST NIL) + (SETQ FN (PACKFILENAME.STRING UNPACKED)) + (if (STREQUAL (SUBSTRING FN -1) + ".") + then (SETQ FN (SUBSTRING UNIXFILE 1 -2))) + (SETQ FN (SLASHIT FN] + (UNVERSIONED.EXISTS (INFILEP (CONCAT "{UNIX}" UNVERSIONED))) + (TMPDIR (CONCAT "/tmp/" (RAND 1000 9999))) + (TARGETFILE.LISP (PACKFILENAME.STRING 'HOST "{UNIX}" 'DIRECTORY TMPDIR + 'NAME NEWNAME 'EXTENSION EXTENSION)) + (TARGETFILE.UNIX (SLASHIT (PACKFILENAME.STRING 'HOST NIL 'DIRECTORY + TMPDIR 'NAME NEWNAME 'EXTENSION + EXTENSION))) + (UNIXFILE NIL)) + (DECLARE (SPECVARS UNIXFILE)) + (if (OR VERSION.SPECIFIED (NOT UNVERSIONED.EXISTS)) + then (COPYFILE FULLNAME TARGETFILE.LISP) + (SETQ UNIXFILE TARGETFILE.UNIX) + else (SETQ UNIXFILE UNVERSIONED)) + (CL:WITH-OPEN-STREAM + (SHELLSTREAM (OPENSTREAM (CONCAT "{CORE}SHELLOUT" (RAND 1000 9999)) + 'BOTH)) + (ShellCommand (CONCAT OPENER " '" UNIXFILE "'" + " >>/tmp/ShellOpener-warnings-$$.txt") + SHELLSTREAM) + (if (EQ (GETFILEPTR SHELLSTREAM) + 0) + then T + else (LET ((OUTSTRING (ALLOCSTRING (GETFILEPTR SHELLSTREAM) + " "))) + (CL:WITH-OPEN-STREAM (STRINGSTREAM (OPENSTRINGSTREAM + OUTSTRING + 'OUTPUT)) + (COPYCHARS SHELLSTREAM STRINGSTREAM 0 -1)) + OUTSTRING]) (PROCESS-COMMAND [LAMBDA (CMD) (* ; "Edited 17-Jul-2022 08:17 by rmk") @@ -244,7 +240,9 @@ 0))) DO (BLOCK) FINALLY (RETURN CODE]) (SLASHIT - [LAMBDA (X LCASEDIRS NOHOST) (* ; "Edited 23-Sep-2023 15:27 by rmk") + [LAMBDA (X LCASEDIRS NOHOST) (* ; "Edited 22-Oct-2025 13:05 by rmk") + (* ; "Edited 25-Sep-2025 09:57 by rmk") + (* ; "Edited 23-Sep-2023 15:27 by rmk") (* ;; "It would also be nice to use the generic unpackfilename/packfilename tools. But packfilename sticks in brackets again, and sticks a dot on when removing the version.") @@ -255,13 +253,14 @@ (LET [LASTDIRPOS SLASHED (DIRPOS (ADD1 (OR (STRPOS "}" X) 0] [SETQ SLASHED (CONCATCODES (for I C from DIRPOS while (SETQ C (NTHCHARCODE X I)) - collect (SELCHARQ C - ((< >) - (SETQ LASTDIRPOS I) - (CHARCODE /)) - (/ (SETQ LASTDIRPOS I) - C) - C] + join (SELCHARQ C + ((< >) + (SETQ LASTDIRPOS I) + (CONS (CHARCODE /))) + (/ (SETQ LASTDIRPOS I) + (CONS C)) + (SPACE (CHARCODE (\ SPACE))) + (CONS C] (CL:WHEN (AND LCASEDIRS LASTDIRPOS) (SETQ LASTDIRPOS (ADD1 (IDIFFERENCE LASTDIRPOS DIRPOS))) (SETQ SLASHED (CONCAT (L-CASE (SUBSTRING SLASHED 1 LASTDIRPOS)) @@ -274,13 +273,15 @@ SLASHED))]) (UNIX-FILE-NAME - [LAMBDA (FILE ACCESS COPY) (* ; "Edited 1-Oct-2023 20:52 by rmk") + [LAMBDA (FILE ACCESS COPY) (* ; "Edited 27-Sep-2025 16:24 by rmk") + (* ; "Edited 19-Sep-2025 07:29 by rmk") + (* ; "Edited 13-Sep-2025 18:37 by rmk") + (* ; "Edited 1-Oct-2023 20:52 by rmk") - (* ;; "Tries to return the string that would reference FILE in a Unix shell, for the use of PROCESS-COMMAND and ShellCommand. If VERSION is 1, it assumes that the Unix file is doesn't have the Medley version convention. If FILE does not have a corresponding Unix name, COPY is non-NIL, and ACCESS is INPUT, FILE will be copied to a unix tmp file (with COPY in its name) and that name will be returned.") + (* ;; "Forces an extension %"ufn%" if there isn't one already, to avoid the dot/no-dot question") - (CL:WHEN (\GETSTREAM FILE ACCESS T) - (SETQ FILE (OR (FULLNAME FILE) - FILE))) (* ; "Might catch NODIRCORE") + (* ;; "Tries to return the string that would reference FILE in a Unix shell, for the use of PROCESS-COMMAND and ShellCommand. If VERSION is 1, it assumes that the Unix file is doesn't have the Medley version convention. If FILE does not have a corresponding Unix name, COPY is non-NIL, and ACCESS is INPUT, FILE will be copied to a unix tmp file (with COPY in its name) and that name will be returned.") + (* ; "Might catch NODIRCORE") (CL:WHEN FILE (SETQ FILE (TRUEFILENAME FILE)) (CL:UNLESS (STREAMP FILE) @@ -290,35 +291,42 @@ (NIL (SETQ ACCESS 'INPUT) 'OLD) (\ILLEGAL.ARG ACCESS]) - [SELECTQ (FILENAMEFIELD FILE 'HOST) - (UNIX [SUBSTRING FILE (ADD1 (CONSTANT (NCHARS "{UNIX}"]) - (DSK (LET [(VERSION (FILENAMEFIELD FILE 'VERSION] - (SETQ FILE (SLASHIT (PACKFILENAME 'HOST NIL 'VERSION NIL 'BODY FILE))) - (CL:IF (AND VERSION (IGREATERP VERSION 1)) - (CONCAT FILE (CL:IF (FILENAMEFIELD FILE 'EXTENSION) - "." - "") - "~" VERSION "~") - FILE))) - (CL:WHEN (AND COPY (EQ ACCESS 'INPUT) - FILE) - (RESETLST - (CL:WHEN (\GETSTREAM FILE 'INPUT T) (* ; "Hope is randaccess") - [RESETSAVE (GETFILEPTR FILE) - `(PROGN (SETFILEPTR ,FILE OLDVALUE]) - (COPYFILE FILE (CONCAT "{UNIX}/tmp/medley-" (L-CASE COPY) - "-" - (IDATE) - "-" - (RAND) - (CL:IF (FILENAMEFIELD FILE 'EXTENSION) - (CONCAT "." (FILENAMEFIELD FILE 'EXTENSION)) - "")))))])]) + (LET (UNAME VERSION) + [SELECTQ (FILENAMEFIELD FILE 'HOST) + ((UNIX DSK) + (SETQ UNAME FILE)) + (PROGN + (* ;; "Catch the streams as well as other devices (CORE, servers)") + + [SETQ UNAME (OUTFILEP (CONCAT "{DSK}/tmp/medley-" (CL:IF COPY + (CONCAT (L-CASE COPY) + "-") + "") + (IDATE] + (CL:WHEN (AND COPY FILE) + (RESETLST + (CL:WHEN (\GETSTREAM FILE 'INPUT T) + (* ; "Hope it's randaccess") + [RESETSAVE (GETFILEPTR FILE) + `(PROGN (SETFILEPTR ,FILE OLDVALUE]) + + (* ;; "Let DSK pick a new version number, rather than RAND") + + (COPYFILE FILE UNAME)))] + (SETQ VERSION (FILENAMEFIELD UNAME 'VERSION)) (* ; "Convert to Unix version. ") + (SETQ UNAME (PACKFILENAME 'VERSION NIL 'BODY UNAME)) + (CL:WHEN (AND VERSION (IGREATERP VERSION 1)) + (SETQ UNAME (CONCAT UNAME ".~" VERSION "~"))) + (SETQ UNAME (SLASHIT UNAME NIL T)) + (CL:IF (EQ (CHARCODE %.) + (NTHCHARCODE UNAME -1)) + (SUBSTRING UNAME 1 -2) + UNAME)))]) ) (PUTPROPS UNIXUTILS FILETYPE CL:COMPILE-FILE) (DECLARE%: DONTCOPY - (FILEMAP (NIL (1146 1519 (ShellCommand 1146 . 1519)) (1521 1918 (ShellWhich 1521 . 1918)) (2008 16585 -(ShellBrowser 2018 . 3790) (ShellBrowse 3792 . 4477) (ShellOpener 4479 . 6167) (ShellOpen 6169 . 11324 -) (PROCESS-COMMAND 11326 . 11939) (SLASHIT 11941 . 13983) (UNIX-FILE-NAME 13985 . 16583))))) + (FILEMAP (NIL (1110 1483 (ShellCommand 1110 . 1483)) (1485 1882 (ShellWhich 1485 . 1882)) (1972 17841 +(ShellBrowser 1982 . 3754) (ShellBrowse 3756 . 4441) (ShellOpener 4443 . 6131) (ShellOpen 6133 . 11612 +) (PROCESS-COMMAND 11614 . 12227) (SLASHIT 12229 . 14566) (UNIX-FILE-NAME 14568 . 17839))))) STOP diff --git a/library/UNIXUTILS.DFASL b/library/UNIXUTILS.DFASL index 8a0089552e16dc159adcc45f926c59555356e7f9..8dd2444392edea8b78d57bf23c6f5d9ca6fef75a 100644 GIT binary patch delta 1553 zcmZuxTW=dx5Z<$E$8nOTcAdn*G_6zBQ3Z7_wv#F$sqENW@7C)}ymph2a7hz`8#`%L z!X;Fx(?Tm1EKzH5wOgnVec(A4A;oP&`T#`;1OkE7Cw>AL(ia|RI5R606=7L3bH17R z&N(w@=fQKA`mY}`k4E{B#E&lxDpLj<>-CmiYL0k3?)dbA+tcmob@q4%x_bwDd+JUE zWXbu;nS91MeLgd_keP9gW@hFyugy#?9(8&=PMUG{bmqJhvW{X}-+<4zx;e|W{~uqu zc<{o1_g;U)@H*kxaL@Yh#(I_--u1^OZw=So=UMkPE*dD}Q&#t-BV>P4_=cIC+i76v zuaXu1Zeq8@%B;U}OSCW?t6iq>XIhda4AEp&A@DD<;a*a!mW$?KJTV>=0!f)ht#8{b zEZw0`scGpTj}&){^z=5zA;X`PfqjxeDYqOmZ*xTVE5EcHE_`_w4&ko@IaU&uXLAp& z?Ob+4v|5dR3E>w$T?q@({9yIPQtX{*{&@AKbT{8+hK!X%(R^1`lkP_Kr7fCwR?A3v zMTd}KL(2VpZ)Hs|)f0@n6DUQNvuo~%sLb0P&2-;)F$aV1h`B07lw0=JS|hzM39<%d z)1EAt7>3h0RiS@_Cc+(v31tmRBi`!Tr9Du-FSNHoZ6J0J%-cHh;V$w%nkqQ2>gYMT zU41Yf3kFibc!-x@rfbt=3=q$RUHzbFpr$N9Flp%5)dA&VtKG!`%PqCYq*R5Sbkcs2 zCFWyoNWEc(;6wh~tE5f&wpA)voy7kt4QBAN&!btLC`GQG)J?@-SsB4<46oUSv0S^g z(aTf|>GdGcT^TOr)ztgh#`730N>NWWz172v;u(lPXhO3 zn8#$`K8AoONqjgUbq12*M*0d&aw^FOq6rf?Q^_>{?@1bf=fdKuXu38rO*)7MlqI1r`+HnhdWTY4uC(#kJ>T*2NQ5UqVMb? z7{Ad0(TUckdV}+iV0-n}t+{Z4LVs8eN7msO!M8(=q+{B!HBylEFBPVcK&KGS2x8Z# z5!t8D6w<6E3HRho>F0cSpo$CC_b{XCpoDsnxF+qby|iY=L^2+Z;cO!=;((C`ZIVK# z0#cf1E*t12K3Dd(^*nQ(enoJlEA(#eH`Su`0$okHht)3bI!Tn z`OZ1_o^$u^)X@j8fAY${=6KsggO(aj`1?n@M~3_ZN&j%7FPRwkpZQ16dW%li9C5}| zW23zZp?@Hm5PC-w-DeYhg4b6ONu8^xsjl$}-kSQuwe{X=XNwdMy-W+IM*6zP4^g^6 z>51W<#HhexC;~ygx?48}`TGCLHlL}x_`kNu)f`!Fv5a90-|DMgUbW_O%&J-b(eAVH zUaxPND;T#h$fsZ0-d@i2k07)sSd30))j=nspX?bXL3ldf_^X)9s(Q7xG_B?^Jopfq zti=uO&WzoG7XQ@lX+cJ7yEiBnWZPVb!{j(`A=8w8gD4h^Fo_#FX5S1g{FDgYiWb}t&4t1TR%XJQr|WiP=<({}TF{=4p^JB=*|tedzgAM_etR}N1BD^^ zU3qAoBKprII~{goK7*S$o4!$^q-hvWctfXO3z69w=;oPpg3N(aeK?iF4)QIzz|=Q@ ztuWItk;|LN6qv?)Celw!!YRRPAh8@c9TY{e!cX-o_yA=-_71Xf)1`R@eRB zT*Py*_f?`$*UN8PT^>8eM`Vnt_sKb?CV_qDBDs(v7t9u|bpW;&CTYgF-9(#Wm7D3k zItmV>9MmHRQ+SUx0n3|lQx%i*+vw=6F(uj>fxTeCHb#Gxr|6HeGDt;*p9!Cl*?y7D zWuofr@Viy!-&lo*y~Fbv2OZFxQb^D4vT-<1|6!N6{5KkOiS6gt7sf9%DFYr;pc1pa NICNq6JG}J#`QL}`@Bsh- From bde0b3d754ab5ccfa3fe44be9e93a6e0e9910eb0 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Wed, 22 Oct 2025 13:22:20 -0700 Subject: [PATCH 5/6] {MEDLEY} is on {UNIX} --- lispusers/GITFNS | 66 ++++++++++++++++++++++-------------------- lispusers/GITFNS.LCOM | Bin 51710 -> 51755 bytes 2 files changed, 34 insertions(+), 32 deletions(-) diff --git a/lispusers/GITFNS b/lispusers/GITFNS index 19d9fc898..f6f9446a9 100644 --- a/lispusers/GITFNS +++ b/lispusers/GITFNS @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "21-Oct-2025 18:31:43" {WMEDLEY}GITFNS.;559 134865 +(FILECREATED "22-Oct-2025 12:51:34" {WMEDLEY}GITFNS.;560 135031 :EDIT-BY rmk - :CHANGES-TO (FNS GIT-GET-DIFFERENT-FILES GIT-BRANCH-DIFF) + :CHANGES-TO (FNS GFILE4MFILE GIT-MAKE-PROJECT) - :PREVIOUS-DATE "21-Oct-2025 14:12:21" {WMEDLEY}GITFNS.;558) + :PREVIOUS-DATE "21-Oct-2025 18:31:43" {WMEDLEY}GITFNS.;559) (PRETTYCOMPRINT GITFNSCOMS) @@ -170,6 +170,7 @@ (GIT-MAKE-PROJECT [LAMBDA (PROJECTNAME CLONEPATH WORKINGPATH EXCLUSIONS DEFAULTSUBDIRS) + (* ; "Edited 22-Oct-2025 12:45 by rmk") (* ; "Edited 20-Oct-2025 18:10 by rmk") (* ; "Edited 14-Oct-2025 11:51 by rmk") (* ; "Edited 1-Oct-2023 19:33 by rmk") @@ -234,6 +235,7 @@ else (ERROR (CONCAT "Can't find the clone directory " CLONEPATH " for " PROJECTNAME] (CL:WHEN CLONEPATH + (SETQ CLONEPATH (PACKFILENAME 'HOST 'UNIX 'BODY CLONEPATH)) (LET (GITIGNORE PROJECT WP) (CL:WHEN (SETQ GITIGNORE (INFILEP (PACKFILENAME.STRING 'NAME ".gitignore" 'BODY CLONEPATH))) @@ -2444,33 +2446,33 @@ (PUTPROPS GITFNS FILETYPE :TCOMPL) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4209 21141 (GIT-CLONEP 4219 . 5657) (GIT-INIT 5659 . 6289) (GIT-MAKE-PROJECT 6291 . -14199) (GIT-GET-PROJECT 14201 . 16126) (GIT-PUT-PROJECT-FIELD 16128 . 17769) (GIT-PROJECT-PATH 17771 - . 18815) (FIND-ANCESTOR-DIRECTORY 18817 . 19166) (GIT-FIND-CLONE 19168 . 20249) (GIT-MAINBRANCH 20251 - . 20646) (GIT-MAINBRANCH? 20648 . 21139)) (26604 31533 (PRC-COMMAND 26614 . 31531)) (31589 34377 ( -ALLSUBDIRS 31599 . 32885) (MEDLEYSUBDIRS 32887 . 33580) (GITSUBDIRS 33582 . 34375)) (34378 39168 ( -TOGIT 34388 . 35794) (FROMGIT 35796 . 36777) (GIT-DELETE-FILE 36779 . 37625) (MYMEDLEY-DELETE-FILES -37627 . 39166)) (39169 42172 (MYMEDLEYSUBDIR 39179 . 39635) (GITSUBDIR 39637 . 40080) (STRIPDIR 40082 - . 40453) (STRIPHOST 40455 . 40695) (STRIPNAME 40697 . 41450) (STRIPWHERE 41452 . 42170)) (42173 44075 - (GFILE4MFILE 42183 . 42546) (MFILE4GFILE 42548 . 43117) (GIT-REPO-FILENAME 43119 . 44073)) (44124 -54379 (GIT-COMMIT 44134 . 44960) (GIT-PUSH 44962 . 45722) (GIT-PULL 45724 . 46476) (GIT-APPROVAL 46478 - . 46827) (GIT-GET-FILE 46829 . 48744) (GIT-FILE-EXISTS? 48746 . 49020) (GIT-REMOTE-UPDATE 49022 . -49857) (GIT-REMOTE-ADD 49859 . 50166) (GIT-FILE-DATE 50168 . 51215) (GIT-FILE-HISTORY 51217 . 53151) ( -GIT-PRINT-FILE-HISTORY 53153 . 54203) (GIT-FETCH 54205 . 54377)) (54409 65889 (GIT-BRANCH-DIFF 54419 - . 61308) (GIT-COMMIT-DIFFS 61310 . 62201) (GIT-BRANCH-RELATIONS 62203 . 65887)) (65934 84673 ( -GIT-BRANCH-NUM 65944 . 66517) (GIT-CHECKOUT 66519 . 67805) (GIT-WHICH-BRANCH 67807 . 68214) ( -GIT-MAKE-BRANCH 68216 . 70795) (GIT-BRANCHES 70797 . 73392) (GIT-BRANCH-EXISTS? 73394 . 74265) ( -GIT-PICK-BRANCH 74267 . 74757) (GIT-BRANCH-MENU 74759 . 75640) (GIT-BRANCH-WHENSELECTEDFN 75642 . -77181) (GIT-PULL-REQUESTS 77183 . 81054) (GIT-SHORT-BRANCH-NAME 81056 . 81347) (GIT-LONG-NAME 81349 . -81666) (GIT-PRC-BRANCHES 81668 . 84671)) (84703 88151 (GIT-MY-CURRENT-BRANCH 84713 . 85083) ( -GIT-MY-BRANCHP 85085 . 85703) (GIT-MY-NEXT-BRANCH 85705 . 86199) (GIT-MY-BRANCHES 86201 . 88149)) ( -88197 92272 (GIT-ADD-WORKTREE 88207 . 89814) (GIT-REMOVE-WORKTREE 89816 . 90746) (GIT-LIST-WORKTREES -90748 . 91552) (WORKTREEDIR 91554 . 92270)) (92320 126405 (GIT-GET-DIFFERENT-FILES 92330 . 99238) ( -GIT-BRANCHES-COMPARE-DIRECTORIES 99240 . 106679) (GIT-WORKING-COMPARE-DIRECTORIES 106681 . 112388) ( -GIT-COMPARE-WORKTREE 112390 . 116368) (GITCDOBJBUTTONFN 116370 . 120860) (GIT-CD-LABELFN 120862 . -121944) (GIT-CD-MENUFN 121946 . 124386) (GIT-WORKING-COMPARE-FILES 124388 . 125008) ( -GIT-BRANCHES-COMPARE-FILES 125010 . 126174) (GIT-PR-COMPARE 126176 . 126403)) (126475 134798 (CDGITDIR - 126485 . 127172) (GIT-COMMAND 127174 . 128732) (GITORIGIN 128734 . 129431) (GIT-INITIALS 129433 . -129737) (GIT-COMMAND-TO-FILE 129739 . 133224) (GIT-RESULT-TO-LINES 133226 . 134131) (STRIPLOCAL 134133 - . 134796))))) + (FILEMAP (NIL (4198 21307 (GIT-CLONEP 4208 . 5646) (GIT-INIT 5648 . 6278) (GIT-MAKE-PROJECT 6280 . +14365) (GIT-GET-PROJECT 14367 . 16292) (GIT-PUT-PROJECT-FIELD 16294 . 17935) (GIT-PROJECT-PATH 17937 + . 18981) (FIND-ANCESTOR-DIRECTORY 18983 . 19332) (GIT-FIND-CLONE 19334 . 20415) (GIT-MAINBRANCH 20417 + . 20812) (GIT-MAINBRANCH? 20814 . 21305)) (26770 31699 (PRC-COMMAND 26780 . 31697)) (31755 34543 ( +ALLSUBDIRS 31765 . 33051) (MEDLEYSUBDIRS 33053 . 33746) (GITSUBDIRS 33748 . 34541)) (34544 39334 ( +TOGIT 34554 . 35960) (FROMGIT 35962 . 36943) (GIT-DELETE-FILE 36945 . 37791) (MYMEDLEY-DELETE-FILES +37793 . 39332)) (39335 42338 (MYMEDLEYSUBDIR 39345 . 39801) (GITSUBDIR 39803 . 40246) (STRIPDIR 40248 + . 40619) (STRIPHOST 40621 . 40861) (STRIPNAME 40863 . 41616) (STRIPWHERE 41618 . 42336)) (42339 44241 + (GFILE4MFILE 42349 . 42712) (MFILE4GFILE 42714 . 43283) (GIT-REPO-FILENAME 43285 . 44239)) (44290 +54545 (GIT-COMMIT 44300 . 45126) (GIT-PUSH 45128 . 45888) (GIT-PULL 45890 . 46642) (GIT-APPROVAL 46644 + . 46993) (GIT-GET-FILE 46995 . 48910) (GIT-FILE-EXISTS? 48912 . 49186) (GIT-REMOTE-UPDATE 49188 . +50023) (GIT-REMOTE-ADD 50025 . 50332) (GIT-FILE-DATE 50334 . 51381) (GIT-FILE-HISTORY 51383 . 53317) ( +GIT-PRINT-FILE-HISTORY 53319 . 54369) (GIT-FETCH 54371 . 54543)) (54575 66055 (GIT-BRANCH-DIFF 54585 + . 61474) (GIT-COMMIT-DIFFS 61476 . 62367) (GIT-BRANCH-RELATIONS 62369 . 66053)) (66100 84839 ( +GIT-BRANCH-NUM 66110 . 66683) (GIT-CHECKOUT 66685 . 67971) (GIT-WHICH-BRANCH 67973 . 68380) ( +GIT-MAKE-BRANCH 68382 . 70961) (GIT-BRANCHES 70963 . 73558) (GIT-BRANCH-EXISTS? 73560 . 74431) ( +GIT-PICK-BRANCH 74433 . 74923) (GIT-BRANCH-MENU 74925 . 75806) (GIT-BRANCH-WHENSELECTEDFN 75808 . +77347) (GIT-PULL-REQUESTS 77349 . 81220) (GIT-SHORT-BRANCH-NAME 81222 . 81513) (GIT-LONG-NAME 81515 . +81832) (GIT-PRC-BRANCHES 81834 . 84837)) (84869 88317 (GIT-MY-CURRENT-BRANCH 84879 . 85249) ( +GIT-MY-BRANCHP 85251 . 85869) (GIT-MY-NEXT-BRANCH 85871 . 86365) (GIT-MY-BRANCHES 86367 . 88315)) ( +88363 92438 (GIT-ADD-WORKTREE 88373 . 89980) (GIT-REMOVE-WORKTREE 89982 . 90912) (GIT-LIST-WORKTREES +90914 . 91718) (WORKTREEDIR 91720 . 92436)) (92486 126571 (GIT-GET-DIFFERENT-FILES 92496 . 99404) ( +GIT-BRANCHES-COMPARE-DIRECTORIES 99406 . 106845) (GIT-WORKING-COMPARE-DIRECTORIES 106847 . 112554) ( +GIT-COMPARE-WORKTREE 112556 . 116534) (GITCDOBJBUTTONFN 116536 . 121026) (GIT-CD-LABELFN 121028 . +122110) (GIT-CD-MENUFN 122112 . 124552) (GIT-WORKING-COMPARE-FILES 124554 . 125174) ( +GIT-BRANCHES-COMPARE-FILES 125176 . 126340) (GIT-PR-COMPARE 126342 . 126569)) (126641 134964 (CDGITDIR + 126651 . 127338) (GIT-COMMAND 127340 . 128898) (GITORIGIN 128900 . 129597) (GIT-INITIALS 129599 . +129903) (GIT-COMMAND-TO-FILE 129905 . 133390) (GIT-RESULT-TO-LINES 133392 . 134297) (STRIPLOCAL 134299 + . 134962))))) STOP diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM index 302b29a0092fc690f932bb2900578e65ebade30b..ae44d0996852983046af0f6f64d4308eda593414 100644 GIT binary patch delta 1074 zcmZuw&2G~`5XOyKpg=DiK;qEpN>ptnr|Vts+VP>1<7`?J#}57}t<(!Np{iP%DhZ+p zp}YbRE<6L`lw%)&r{KT~Ah>b>#-VAWf)6`CJ3IT$_pN^o3LoDW-fZ1wdbHcq8D##=G%kSzNE`AOW5Qtb*OZNMWEB#Z9hBSKWsIjb#mP4-gjW#PxZQ6Q+gwg9w;w` z^{O8zv!1W8e*~nO1p!R9D;A3cnvZ*}<}CbkkF|t%k>%N?{Ja+{H&vBORcBZSfi{0# zQZTrn+!*wUxqa})#k6-4mTW=558&(T4`9A`Z-l#wDfNJTW$tFro)jf&wSE; z55LbWYIncvUBT~Sac}1Fld0jIYoE2gE(8fl?-Q6q%}6~|EwQW)pej6xPBftzgjcow@>{22L-;_c9_E0DA=AdNGX z4?W5Vn?b#nq_H2agAf$F!1018Q6RX4o%&|rBOt+ze>8I`r3MJYf~cWF5R{I9jyo66 zdYYy4Sxj3%KhQlFyPK8;Nmd>gNgL2@LpBsH`Kj0ETQXnxe7s2*l+ z0Fv8yAx@Vf@Uv4KkB>Ct_&i2^IC7qa{uVGKId3#Lxm8=UuseB8K$c2C9_7{q@(QhO z{LM?u=dme(z|(dIS7}lpXgD2cbBk*wihtP}0aI`wFWQ}h{i8h{LuLb6CBRXxCDLpi aw(x(%n5-1LFT3sMJ+cg($zf~m!|5Ni!U_HW delta 968 zcmZuvO>5Lp6eU)xR;z*)-AHdASge?7@;;JGgkqY!Y2##)_>!oFf{S*P;>VO}MXi+n z1#8^+16+x#S-22f>cW4Ze?SBUw=Tq+sbh<{$-U>kdk^Q{lUL7&ew9N{Z=5vsWNBTe z1{GjBE;C)uw(m^WM12ZIh-vS>8g*CLE;k8u+e@8$t1EZg%g}zb+Fd*6mN(y=D*cVI zqbv7us!>D{nD+LMu}knD3Sp3`k@Jl(lD?8&E(0L+KPpO38$T@SU^4DlqFm7?%F7$4 zkI#j+%>h=PRSKy`(d*OYpyk}JsR8HQm3uX9LJ83VWNzR&@4?GGon|L(#q z3R{uxd&tfOhpd<#G;sl#rbz}I|B5{i)EGQ4+o;4T*-EZSJt)#B!~@9;m=Lh&r6?kx z2#h_ztV0-Aic(-Euk@X0{v)urd1OsHi>_4r{aFnUVSww+CaPMUm7}Alx42UWx5yj1 z1Ki=@${V>f~*M)uitl*S^eekz%_Zb@FHLqvZHbw!n^i| zC{FkNpiF?0d7)yU%-FTBd^bvGETkrz1T5PEa=nTskS7?0vs33-uP~)R;8v%LU(2+C zU@+{mc5HISvPXc-5a38o9(KBSR_@={5gG!>Gy#T2oF~ieyY2P%GGcO}w)S|f^I)A! Mp;*>?cI?I5-?47?H2?qr From 44f767edaa06e68adf9328f14fb449fd205b55b3 Mon Sep 17 00:00:00 2001 From: rmkaplan Date: Sun, 26 Oct 2025 09:25:59 -0700 Subject: [PATCH 6/6] gwc copies to UNIX--doesn't track Medley version numbers in the clone --- lispusers/COMPAREDIRECTORIES | 66 ++++---- lispusers/COMPAREDIRECTORIES.LCOM | Bin 41875 -> 42070 bytes lispusers/EXAMINEDEFS | 15 +- lispusers/EXAMINEDEFS.LCOM | Bin 5612 -> 5695 bytes lispusers/GITFNS | 243 +++++++++++++++--------------- lispusers/GITFNS.LCOM | Bin 51755 -> 51656 bytes 6 files changed, 173 insertions(+), 151 deletions(-) diff --git a/lispusers/COMPAREDIRECTORIES b/lispusers/COMPAREDIRECTORIES index 840c2d68d..cfe48dc53 100644 --- a/lispusers/COMPAREDIRECTORIES +++ b/lispusers/COMPAREDIRECTORIES @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "22-Oct-2025 08:32:01" {WMEDLEY}COMPAREDIRECTORIES.;272 134315 +(FILECREATED "25-Oct-2025 23:59:24" {MEDLEY}COMPAREDIRECTORIES.;2 135376 :EDIT-BY rmk - :CHANGES-TO (FNS COMPAREDIRECTORIES.INFOS.TYPE) + :CHANGES-TO (FNS CDBROWSER-COPY) - :PREVIOUS-DATE "21-Oct-2025 14:36:51" {WMEDLEY}COMPAREDIRECTORIES.;271) + :PREVIOUS-DATE "22-Oct-2025 08:32:01" {WMEDLEY}COMPAREDIRECTORIES.;272) (PRETTYCOMPRINT COMPAREDIRECTORIESCOMS) @@ -2123,13 +2123,17 @@ NIL]) (CDBROWSER-COPY - [LAMBDA (CDBROWSER TBITEM SOURCE) (* ; "Edited 24-May-2022 15:49 by rmk") + [LAMBDA (CDBROWSER TBITEM SOURCE UNIXDEST) (* ; "Edited 25-Oct-2025 23:58 by rmk") + (* ; "Edited 24-May-2022 15:49 by rmk") (* ; "Edited 25-Apr-2022 09:24 by rmk") (* ; "Edited 5-Feb-2022 17:27 by rmk") (* ; "Edited 2-Feb-2022 22:18 by rmk") (* ;; "Copies the file identified as SOURCE (LEFT or RIGHT) in CDENTRY to the other file of the end. If the destination file is missing, it is assumed to be a new/unversioned file of the same name as the source but with the directory prefix switched. CDVALUE needed to know what directory prefixes are involved.") + (* ;; + "if UNIXDEST, coerces the true destination file to host UNIX--suppresses Medley version numbers") + (* ;; "Returns NIL if the copy fails.") (CL:UNLESS (TB.ITEM.DELETED? CDBROWSER TBITEM) @@ -2173,7 +2177,17 @@ (CLEARW T) (CL:UNLESS DESTFILE (SETQ DESTFILE (CD-SWAPDIRS SOURCEFILE SOURCEDIR DESTDIR))) - (SETQ RESULT (COPYFILE SOURCEFILE (PACKFILENAME.STRING 'VERSION NIL 'BODY DESTFILE))) + [SETQ RESULT (if UNIXDEST + then [PSEUDOFILENAME (PACKFILENAME 'HOST 'DSK 'BODY + (COPYFILE SOURCEFILE (PACKFILENAME + 'HOST + 'UNIX + 'VERSION NIL + 'BODY + (TRUEFILENAME + DESTFILE] + else (COPYFILE SOURCEFILE (PACKFILENAME.STRING 'VERSION NIL + 'BODY DESTFILE] (PRIN3 (IF RESULT THEN (TB.DELETE.ITEM CDBROWSER TBITEM) (CONCAT "Copied to " RESULT) @@ -2257,25 +2271,25 @@ (MOVD? 'NILL 'TEDIT.FILEDATE) (DECLARE%: DONTCOPY - (FILEMAP (NIL (2673 23652 (COMPAREDIRECTORIES 2683 . 8018) (COMPAREDIRECTORIES.INFOS 8020 . 11249) ( -COMPAREDIRECTORIES.CANDIDATES 11251 . 14636) (CDENTRIES.SELECT 14638 . 19540) ( -COMPAREDIRECTORIES.INFOS.TYPE 19542 . 20886) (MATCHNAME 20888 . 21568) (CD.INSURECDVALUE 21570 . 23184 -) (CD.UPDATEWIDTHS 23186 . 23650)) (23653 34358 (CDFILES 23663 . 29760) (CDFILES.MATCH 29762 . 31387) -(CDFILES.PATS 31389 . 34356)) (34359 52377 (CDPRINT 34369 . 36886) (CDPRINT.HEADER 36888 . 37785) ( -CDPRINT.LINE 37787 . 41216) (CDPRINT.MAXWIDTHS 41218 . 45333) (CDPRINT.COLHEADERS 45335 . 46620) ( -CDPRINT.COLUMNS 46622 . 51742) (CDTEDIT 51744 . 52375)) (52378 61499 (CDMAP 52388 . 53820) (CDENTRY -53822 . 54131) (CDSUBSET 54133 . 55572) (CDMERGE 55574 . 59558) (CDMERGE.COMMON 59560 . 60875) ( -CD.SORT 60877 . 61497)) (61500 69038 (BINCOMP 61510 . 65799) (EOLTYPE 65801 . 68363) (EOLTYPE.SHOW -68365 . 69036)) (69566 82093 (FIND-UNCOMPILED-FILES 69576 . 73219) (FIND-UNSOURCED-FILES 73221 . 75605 -) (FIND-SOURCE-FILES 75607 . 77345) (FIND-COMPILED-FILES 77347 . 79224) (FIND-UNLOADED-FILES 79226 . -80079) (FIND-LOADED-FILES 80081 . 80509) (FIND-MULTICOMPILED-FILES 80511 . 82091)) (82094 90525 ( -CREATED-AS 82104 . 86901) (SOURCE-FOR-COMPILED-P 86903 . 89830) (COMPILE-SOURCE-DATE-DIFF 89832 . -90523)) (90526 101289 (FIX-DIRECTORY-DATES 90536 . 93986) (FIX-EQUIV-DATES 93988 . 95513) ( -COPY-COMPARED-FILES 95515 . 97336) (COPY-MISSING-FILES 97338 . 99495) (COMPILED-ON-SAME-SOURCE 99497 - . 101287)) (101483 109321 (CDBROWSER 101493 . 105420) (CDBROWSER.STRINGS 105422 . 109319)) (109483 -111219 (CD.TABLEITEM 109493 . 109713) (CD.TABLEITEM.PRINTFN 109715 . 109914) (CD.TABLEITEM.COPYFN -109916 . 110974) (CDTABLEBROWSER.HEADING.REPAINTFN 110976 . 111217)) (111220 133790 ( -CDTABLEBROWSER.WHENSELECTEDFN 111230 . 111698) (CD.COMMANDSELECTEDFN 111700 . 116801) (CD-MENUFN -116803 . 123029) (CD-COMPARE-FILES 123031 . 126383) (CDBROWSER-COPY 126385 . 130054) ( -CDBROWSER-DELETE-FILE 130056 . 133269) (CD-SWAPDIRS 133271 . 133788))))) + (FILEMAP (NIL (2655 23634 (COMPAREDIRECTORIES 2665 . 8000) (COMPAREDIRECTORIES.INFOS 8002 . 11231) ( +COMPAREDIRECTORIES.CANDIDATES 11233 . 14618) (CDENTRIES.SELECT 14620 . 19522) ( +COMPAREDIRECTORIES.INFOS.TYPE 19524 . 20868) (MATCHNAME 20870 . 21550) (CD.INSURECDVALUE 21552 . 23166 +) (CD.UPDATEWIDTHS 23168 . 23632)) (23635 34340 (CDFILES 23645 . 29742) (CDFILES.MATCH 29744 . 31369) +(CDFILES.PATS 31371 . 34338)) (34341 52359 (CDPRINT 34351 . 36868) (CDPRINT.HEADER 36870 . 37767) ( +CDPRINT.LINE 37769 . 41198) (CDPRINT.MAXWIDTHS 41200 . 45315) (CDPRINT.COLHEADERS 45317 . 46602) ( +CDPRINT.COLUMNS 46604 . 51724) (CDTEDIT 51726 . 52357)) (52360 61481 (CDMAP 52370 . 53802) (CDENTRY +53804 . 54113) (CDSUBSET 54115 . 55554) (CDMERGE 55556 . 59540) (CDMERGE.COMMON 59542 . 60857) ( +CD.SORT 60859 . 61479)) (61482 69020 (BINCOMP 61492 . 65781) (EOLTYPE 65783 . 68345) (EOLTYPE.SHOW +68347 . 69018)) (69548 82075 (FIND-UNCOMPILED-FILES 69558 . 73201) (FIND-UNSOURCED-FILES 73203 . 75587 +) (FIND-SOURCE-FILES 75589 . 77327) (FIND-COMPILED-FILES 77329 . 79206) (FIND-UNLOADED-FILES 79208 . +80061) (FIND-LOADED-FILES 80063 . 80491) (FIND-MULTICOMPILED-FILES 80493 . 82073)) (82076 90507 ( +CREATED-AS 82086 . 86883) (SOURCE-FOR-COMPILED-P 86885 . 89812) (COMPILE-SOURCE-DATE-DIFF 89814 . +90505)) (90508 101271 (FIX-DIRECTORY-DATES 90518 . 93968) (FIX-EQUIV-DATES 93970 . 95495) ( +COPY-COMPARED-FILES 95497 . 97318) (COPY-MISSING-FILES 97320 . 99477) (COMPILED-ON-SAME-SOURCE 99479 + . 101269)) (101465 109303 (CDBROWSER 101475 . 105402) (CDBROWSER.STRINGS 105404 . 109301)) (109465 +111201 (CD.TABLEITEM 109475 . 109695) (CD.TABLEITEM.PRINTFN 109697 . 109896) (CD.TABLEITEM.COPYFN +109898 . 110956) (CDTABLEBROWSER.HEADING.REPAINTFN 110958 . 111199)) (111202 134851 ( +CDTABLEBROWSER.WHENSELECTEDFN 111212 . 111680) (CD.COMMANDSELECTEDFN 111682 . 116783) (CD-MENUFN +116785 . 123011) (CD-COMPARE-FILES 123013 . 126365) (CDBROWSER-COPY 126367 . 131115) ( +CDBROWSER-DELETE-FILE 131117 . 134330) (CD-SWAPDIRS 134332 . 134849))))) STOP diff --git a/lispusers/COMPAREDIRECTORIES.LCOM b/lispusers/COMPAREDIRECTORIES.LCOM index 91d4fc6e03fde34caeac9a532caa15d9feea5b24..0fb8ccd9401cc917cbd3dd6e39301f4bf3f71ba5 100644 GIT binary patch delta 882 zcmZuw&ubGw7)`1uMh!hgR7Ch(!L~@2oge!ndk{Cf6S6klS$8*0>m^7lHqe?La`O;G zk3vnS#bd#v2eA~rrZ@cyy!u~wRA)DBS4-zGeBYb*-uGZ;#J8y*->2R!-P5alWl+T$ z)&Ub+ui2O?FsrQeH#U3g&sL%T0u*>T8qVC9gOY-2PDjYb$fk63czxZgN4yiWsOs`? z8G2IFXt!GMFI`nt1y-L9q~}>aI#uRMvkkw++=w{|^FYC8W=peN1VnUV8sc^Fj`82@ zIk3ZsE&9A2S3PMXU2q;*vuuKG4Jl9(kBj#YDpQ}fN(9=0zvQtv5#!O!^xow{;rv6V zRFG?XzZi&LqxTzM>(A3Z1H02-y1h$jJLct&f&WMf3WaWY?0(oUY-PNB3-U6n*0P43u@JCjre+Z~EC^%P_V_Uuut6Yn-1!{P ztvm(RPoGj5J8H`rlUd@ocr(;>sB>=_2(7^)i(;P#K!^c>3}K!i*g_K;HuW5&+7U=- z4&qw&A^>9wO&%wJk#$5v1iW}2ux3q8kYS0#od?C5__K4fLM#G`+u!WTH$Ldge?u@5 Mw|3QoC%d)sUrLG7jQ{`u delta 600 zcmZva&2G~`6oun-ftpHD_-j$5NEeriMk1CyW7oCCqK-Wg2G@>kr)ebAsw5Fa3UL=< z0}G_`042Q?Bw)i95Pua*6tRLQV9SCBfF(=DC8!`Vt9y>VGxy%neEFQkPuctH_*yu9 zVo_`-H@AEJZU>S9h;XNgE5iArPRfuI6}=L)hZQ0d4P?XAbW>GEALj7hZi)3cU2AwA z{0&KxBtovUHRRX*C#}h1Ik#AIJ!Xf@ikX8ig)`aTEvIz?3RS71;XpWxKOY~*jl#@A z8O(af*4&^GRU94xktjz)DXK}AObtH@lAs*?5MJ%#i_y74YbKMKTCs8&e)ir96u*uh zEj+1SPxYa>S$OaCrc*f%^3Q$uG7n@joB1(bz~aewS0~wVlG?$kH|zLqZ(ewc$55QQ zeWQR)EcK}>Lp^kT3Y4l~2fl5^Kna1GXGNEquI~g*pt1^9bfpoo5Qt&?!N{`q4@PvZ z`Lp=eDyzB7bAT*q;QFao=QTbHXXgo}5LYFKc`Rm<8?#j)yqz7?TPX)b(Q%_Oi#rc? zOxXY*h%Un#3nMq+wWdNfa9TjrEXAMINEDEFS.;57 16827 +(FILECREATED "25-Oct-2025 10:24:30" {WMEDLEY}EXAMINEDEFS.;59 17123 :EDIT-BY rmk - :CHANGES-TO (FNS TEDITDEF) + :CHANGES-TO (FNS EXAMINEDEFS) - :PREVIOUS-DATE "31-Mar-2025 13:53:38" {WMEDLEY}EXAMINEDEFS.;56) + :PREVIOUS-DATE " 6-Apr-2025 23:54:50" {WMEDLEY}EXAMINEDEFS.;57) (PRETTYCOMPRINT EXAMINEDEFSCOMS) @@ -20,7 +20,8 @@ (DEFINEQ (EXAMINEDEFS - [LAMBDA (NAME TYPE SOURCE1 SOURCE2 TITLE1 TITLE2 REGION) (* ; "Edited 31-Mar-2025 13:53 by rmk") + [LAMBDA (NAME TYPE SOURCE1 SOURCE2 TITLE1 TITLE2 REGION) (* ; "Edited 25-Oct-2025 10:24 by rmk") + (* ; "Edited 31-Mar-2025 13:53 by rmk") (* ; "Edited 18-Feb-2025 22:56 by rmk") (* ; "Edited 6-Dec-2024 20:51 by rmk") (* ; "Edited 13-Oct-2023 11:11 by rmk") @@ -148,6 +149,8 @@ DEFAULTFONT))) (TEXTHEIGHT 600)) (DECLARE (SPECVARS COMPARETEXT.ALLCHUNKS)) + (SETQ TITLE1 (CONCAT NAME " from " TITLE1)) + (SETQ TITLE2 (CONCAT NAME " from " TITLE2)) (* ;  "Reuse an existing CT graph window for this DEF") (OR [FIND W IN (OPENWINDOWS) @@ -281,6 +284,6 @@ (FILESLOAD (SYSLOAD) COMPARETEXT VERSIONDEFS) (DECLARE%: DONTCOPY - (FILEMAP (NIL (662 16596 (EXAMINEDEFS 672 . 10994) (EXAMINEFILES 10996 . 12478) (TEDITDEF 12480 . -14802) (EXVV 14804 . 16594))))) + (FILEMAP (NIL (665 16892 (EXAMINEDEFS 675 . 11290) (EXAMINEFILES 11292 . 12774) (TEDITDEF 12776 . +15098) (EXVV 15100 . 16890))))) STOP diff --git a/lispusers/EXAMINEDEFS.LCOM b/lispusers/EXAMINEDEFS.LCOM index 5e21927cdfbfe7a73b09031a17d9b5207957f43c..4db3ff8c8dcb30b16ff0ffbf65926f996960a94c 100644 GIT binary patch delta 612 zcmZvZyKdA#6owfBB-m|OArXb65s_GdSN3>(O~cBb1xp)`@rB(2ip|E6qFfw#6DeIv zTF~^N;|2Txp`+zNDClSzYd2^kWs0N!J4fgLM>@Y>UBCV^S|^sqr)L_`i3Nu46Y87# z*F$>gbwR;|E)5Nz7(S&KcI$Fl9iJW?m3vTLoYu1~AK19R6U8iKgA5K%01t}c5SG__ zy&i_W$(h`_%h#f~tGpaULl&g0pR-N~_>Qj$18uE(U^oUb#U}*MmU6q`Cn@_7@gmbg zX(2YycJm8;MChu~RxS|QY`#B85c(j}-Y%KR^%W=?` zl91LS;aQYNJO)?yAa6rMMhD<{&J9U$OyCKN=W!W0wteH`SY#oa_p9sou}g2A!?nq6 zHfZzt@l&*Ix`1Ialf^X&;6UDVQkO8R&g*G8gKA$+99x%lzpjp3p!Nd94@F0c_@lfK ZPt-uFv8t_rt&2+Sh;J$&rMXr$5Lp6y;T|IB_LixKR&}3LP}VyyPW$$u1;sG>}O`KAbLGIJT)2tutg4x+}PI zr(~^vpl&2Tp#MVpBl;HvUuZ`vxOv=j?>*<VSU7_9xjUcK3_CB;-?P-Z&;?qx*3)BjmLGed|#xHou<;*FwLvgb?oE$UyNtt>Q2# zA#8?cvYbUpn9iy~=2@O*5S$^auCkXI!$y!!Ge4K5+*Lf*<0SA)I4lkpkR8n#tsHT+w~Ly|qCt8*S z=AeQ4oq1DZwfNZV)hjFxRK*ekJ8i5z(44;epjjL#n*(i|4B9tZ(4K0#iq18+yLVR~ F`~lV+jO73T diff --git a/lispusers/GITFNS b/lispusers/GITFNS index f6f9446a9..015d1e521 100644 --- a/lispusers/GITFNS +++ b/lispusers/GITFNS @@ -1,12 +1,12 @@ (DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10) -(FILECREATED "22-Oct-2025 12:51:34" {WMEDLEY}GITFNS.;560 135031 +(FILECREATED "26-Oct-2025 00:01:44" {WMEDLEY}GITFNS.;565 135222 :EDIT-BY rmk - :CHANGES-TO (FNS GFILE4MFILE GIT-MAKE-PROJECT) + :CHANGES-TO (FNS GIT-WORKING-COMPARE-DIRECTORIES GIT-CD-MENUFN GIT-MAKE-PROJECT GIT-CLONEP) - :PREVIOUS-DATE "21-Oct-2025 18:31:43" {WMEDLEY}GITFNS.;559) + :PREVIOUS-DATE "25-Oct-2025 10:37:40" {WMEDLEY}GITFNS.;562) (PRETTYCOMPRINT GITFNSCOMS) @@ -135,23 +135,22 @@ (DEFINEQ (GIT-CLONEP - [LAMBDA (HOST/DIR NOERROR CHECKANCESTORS) (* ; "Edited 14-Oct-2025 11:55 by rmk") + [LAMBDA (HOST/DIR NOERROR CHECKANCESTORS) (* ; "Edited 25-Oct-2025 15:13 by rmk") + (* ; "Edited 14-Oct-2025 11:55 by rmk") (* ; "Edited 1-Oct-2023 18:09 by rmk") (* ; "Edited 12-May-2022 11:44 by rmk") (* ; "Edited 8-May-2022 16:24 by rmk") - (* ;; "If CHECKANCESTORS, looks back up the directory chain to see if perhaps the .git is somewhere higher up.") - - (IF [AND HOST/DIR (LET [(D (SLASHIT (TRUEFILENAME (PACKFILENAME.STRING 'BODY HOST/DIR - 'HOST - 'UNIX] - (IF (DIRECTORYNAMEP (CONCAT D "/.git/")) - THEN D - ELSEIF (AND CHECKANCESTORS (FIND-ANCESTOR-DIRECTORY - D - (FUNCTION (LAMBDA (A) - (DIRECTORYNAMEP (CONCAT A - ".git/"] + (* ;; "If CHECKANCESTORS, looks back up the directory chain to see if perhaps the .git is somewhere higher up. Returns the full true directory name") + + (IF (AND HOST/DIR (LET [(D (SLASHIT (TRUEFILENAME HOST/DIR] + (CL:WHEN [OR (DIRECTORYNAMEP (CONCAT D "/.git/")) + (SETQ D (AND CHECKANCESTORS + (FIND-ANCESTOR-DIRECTORY D + (FUNCTION (LAMBDA (A) + (DIRECTORYNAMEP (CONCAT + A ".git/"] + D))) ELSEIF NOERROR THEN NIL ELSE (ERROR "NOT A GIT CLONE" HOST/DIR]) @@ -170,6 +169,7 @@ (GIT-MAKE-PROJECT [LAMBDA (PROJECTNAME CLONEPATH WORKINGPATH EXCLUSIONS DEFAULTSUBDIRS) + (* ; "Edited 25-Oct-2025 16:53 by rmk") (* ; "Edited 22-Oct-2025 12:45 by rmk") (* ; "Edited 20-Oct-2025 18:10 by rmk") (* ; "Edited 14-Oct-2025 11:51 by rmk") @@ -226,16 +226,10 @@ (ERROR (CONCAT "Can't find a clone directory for " PROJECTNAME)) (PRINTOUT T "Note: Can't find a clone directory for " PROJECTNAME T))) - elseif (GIT-CLONEP [SLASHIT (PACKFILENAME 'HOST 'UNIX 'DIRECTORY - (UNPACKFILENAME.STRING (TRUEFILENAME - CLONEPATH) - 'DIRECTORY - 'RETURN] - T T) + elseif (GIT-CLONEP CLONEPATH T T) else (ERROR (CONCAT "Can't find the clone directory " CLONEPATH " for " PROJECTNAME] (CL:WHEN CLONEPATH - (SETQ CLONEPATH (PACKFILENAME 'HOST 'UNIX 'BODY CLONEPATH)) (LET (GITIGNORE PROJECT WP) (CL:WHEN (SETQ GITIGNORE (INFILEP (PACKFILENAME.STRING 'NAME ".gitignore" 'BODY CLONEPATH))) @@ -275,9 +269,10 @@ then (UNSLASHIT WP) elseif WORKINGPATH then (ERROR (CONCAT "Can't find the working directory " - (AND (EQ WORKINGPATH T) - "") - " for " PROJECTNAME] + (CL:IF WORKINGPATH + (CONCAT WORKINGPATH " ") + "") + "for " PROJECTNAME] (SETQ PROJECT (create GIT-PROJECT PROJECTNAME _ PROJECTNAME GITHOST _ (PACK* "{" (PSEUDOHOST PROJECTNAME CLONEPATH) @@ -833,10 +828,15 @@ (DEFINEQ (GFILE4MFILE - [LAMBDA (MFILE PROJECT) (* ; "Edited 7-May-2022 23:19 by rmk") + [LAMBDA (MFILE PROJECT) (* ; "Edited 25-Oct-2025 09:18 by rmk") + (* ; "Edited 7-May-2022 23:19 by rmk") (* ; "Edited 4-Feb-2022 18:04 by rmk") - (SLASHIT (PACKFILENAME 'HOST (FETCH GITHOST OF PROJECT) - 'VERSION NIL 'BODY MFILE) + + (* ;; "Switch to UNIX: no versions") + + (SLASHIT (PACKFILENAME 'HOST 'UNIX 'BODY (TRUEFILENAME (PACKFILENAME 'HOST (FETCH GITHOST + OF PROJECT) + 'VERSION NIL 'BODY MFILE))) T]) (MFILE4GFILE @@ -1949,100 +1949,103 @@ else '(0 differences)) else '(0 differences]) -(GIT-WORKING-COMPARE-DIRECTORIES +(GIT-WORKING-COMPARE-DIRECTORIES [LAMBDA (SUBDIRS SELECT EXCLUDEDFILES FIXDIRECTORYDATES UPDATE PROJECT) - (* ;; "Edited 29-Apr-2025 15:14 by rmk") + (* ;; "Edited 25-Oct-2025 23:32 by rmk") - (* ;; "Edited 12-Jun-2024 22:52 by mth") + (* ;; "Edited 29-Apr-2025 15:14 by rmk") - (* ;; "Edited 26-Sep-2023 22:41 by rmk") + (* ;; "Edited 12-Jun-2024 22:52 by mth") - (* ;; "Edited 17-Jun-2023 22:54 by rmk") + (* ;; "Edited 26-Sep-2023 22:41 by rmk") - (* ;; "Edited 10-Jun-2023 21:32 by rmk") + (* ;; "Edited 17-Jun-2023 22:54 by rmk") - (* ;; "Edited 20-Jul-2022 21:18 by rmk") + (* ;; "Edited 10-Jun-2023 21:32 by rmk") - (* ;; "Edited 25-Jun-2022 21:37 by rmk") + (* ;; "Edited 20-Jul-2022 21:18 by rmk") - (* ;; "Edited 17-May-2022 17:39 by rmk") + (* ;; "Edited 25-Jun-2022 21:37 by rmk") - (* ;; "Edited 10-May-2022 10:41 by rmk") + (* ;; "Edited 17-May-2022 17:39 by rmk") + + (* ;; "Edited 10-May-2022 10:41 by rmk") (* ;; - "Edited 29-Mar-2022 13:58 by rmk: working medley subdirectories with the current local git branch.") + "Edited 29-Mar-2022 13:58 by rmk: working medley subdirectories with the current local git branch.") - (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) - (CL:WHEN UPDATE (GIT-REMOTE-UPDATE NIL PROJECT)) (* ; "Doesn't matter if we are looking only at local files in the current branch. We aren't fetching or checking out.") - (CL:UNLESS (AND (fetch GITHOST of PROJECT) - (fetch WHOST of PROJECT)) - (ERROR (fetch PROJECTNAME of PROJECT) + (SETQ PROJECT (GIT-GET-PROJECT PROJECT)) + (CL:WHEN UPDATE (GIT-REMOTE-UPDATE NIL PROJECT)) (* ; "Doesn't matter if we are looking only at local files in the current branch. We aren't fetching or checking out.") + (CL:UNLESS (AND (fetch GITHOST of PROJECT) + (fetch WHOST of PROJECT)) + (ERROR (fetch PROJECTNAME of PROJECT) " does not have both git and working directories")) - (CL:WHEN (AND (LISTP SUBDIRS) - (NULL (CDR SUBDIRS))) - (SETQ SUBDIRS (CAR SUBDIRS))) + (CL:WHEN (AND (LISTP SUBDIRS) + (NULL (CDR SUBDIRS))) + (SETQ SUBDIRS (CAR SUBDIRS))) (CL:UNLESS SUBDIRS - (SETQ SUBDIRS (OR (fetch DEFAULTSUBDIRS of PROJECT) + (SETQ SUBDIRS (OR (fetch DEFAULTSUBDIRS of PROJECT) 'ALL))) - (SETQ SUBDIRS (L-CASE SUBDIRS)) - (LET ((SUBDIRSTRING (if (EQ SUBDIRS 'all) - then (SETQ SUBDIRS (ALLSUBDIRS PROJECT)) + (SETQ SUBDIRS (L-CASE SUBDIRS)) + (LET ((SUBDIRSTRING (if (EQ SUBDIRS 'all) + then (SETQ SUBDIRS (ALLSUBDIRS PROJECT)) "ALL subdirectories" - else SUBDIRS))) - (for SUBDIR TITLE CDVAL (WPROJ _ (CONCAT "Working " (L-CASE (fetch PROJECTNAME of PROJECT) + else SUBDIRS))) + (for SUBDIR TITLE CDVAL (WPROJ _ (CONCAT "Working " (L-CASE (fetch PROJECTNAME of PROJECT) T))) (NENTRIES _ 0) - (BRANCH2 _ (GIT-WHICH-BRANCH PROJECT T)) - first (PRINTOUT T "Comparing " SUBDIRSTRING 6 " of " WPROJ " and Git " BRANCH2 T) - (BKSYSBUF " ") inside SUBDIRS - collect (TERPRI T) - (SETQ CDVAL (COMPAREDIRECTORIES (MYMEDLEYSUBDIR SUBDIR T PROJECT) - (GITSUBDIR SUBDIR T PROJECT) - (OR SELECT '(> < ~= -* *-)) + (BRANCH2 _ (GIT-WHICH-BRANCH PROJECT T)) + first (PRINTOUT T "Comparing " SUBDIRSTRING 6 " of " WPROJ " and Git " BRANCH2 T) + (BKSYSBUF " ") inside SUBDIRS + collect (TERPRI T) + (SETQ CDVAL (COMPAREDIRECTORIES (MYMEDLEYSUBDIR SUBDIR T PROJECT) + (GITSUBDIR SUBDIR T PROJECT) + (OR SELECT '(> < ~= -* *-)) '(*.* *>*.* .* *>.*) - (for E DPOS in (GIT-GET-PROJECT PROJECT 'EXCLUSIONS) - collect (SETQ DPOS (STRPOS SUBDIR (FILENAMEFIELD E + (for E DPOS in (GIT-GET-PROJECT PROJECT 'EXCLUSIONS) + collect (SETQ DPOS (STRPOS SUBDIR (FILENAMEFIELD E 'DIRECTORY) 1 NIL T T FILEDIRCASEARRAY)) (CL:IF DPOS - (SUBSTRING E (ADD1 DPOS)) + (SUBSTRING E (ADD1 DPOS)) E)) NIL NIL NIL FIXDIRECTORYDATES)) - [for CDE in (fetch CDENTRIES of CDVAL) - do (CL:WHEN (fetch INFO1 of CDE) - (change (fetch (CDINFO FULLNAME) of (fetch INFO1 of CDE)) - (UNSLASHIT DATUM T))) - (CL:WHEN (fetch INFO2 of CDE) - (change (fetch (CDINFO FULLNAME) of (fetch INFO2 of CDE)) - (SLASHIT DATUM T)))] + [for CDE in (fetch CDENTRIES of CDVAL) + do (CL:WHEN (fetch INFO1 of CDE) + (change (fetch (CDINFO FULLNAME) of (fetch INFO1 of CDE)) + (UNSLASHIT DATUM T))) + (CL:WHEN (fetch INFO2 of CDE) + (change (fetch (CDINFO FULLNAME) of (fetch INFO2 of CDE)) + (SLASHIT DATUM T)))] CDVAL - finally + finally - (* ;; "Set up the browsers after everything has been done, otherwise if the user doesn't pay attention it might hang waiting for a region.") + (* ;; "Set up the browsers after everything has been done, otherwise if the user doesn't pay attention it might hang waiting for a region.") - (CL:WHEN (AND (CDR $$VAL) + (CL:WHEN (AND (CDR $$VAL) GIT-MERGE-COMPARES) - (SETQ $$VAL (CDMERGE $$VAL)) - [SETQ SUBDIRS (CONCATLIST (for SUBDIR in SUBDIRS collect (CONCAT SUBDIR " "]) - [for CDVAL TITLE in $$VAL as SUBDIR inside SUBDIRS - do (SETQ TITLE (CONCAT WPROJ " vs. " BRANCH2 " " SUBDIR " " - (LENGTH (fetch (CDVALUE CDENTRIES) of CDVAL)) + (SETQ $$VAL (CDMERGE $$VAL)) + [SETQ SUBDIRS (CONCATLIST (for SUBDIR in SUBDIRS collect (CONCAT SUBDIR " "]) + [for CDVAL TITLE in $$VAL as SUBDIR inside SUBDIRS + do (SETQ TITLE (CONCAT WPROJ " vs. " BRANCH2 " " SUBDIR " " + (LENGTH (fetch (CDVALUE CDENTRIES) of CDVAL)) " files")) - [CDBROWSER CDVAL TITLE `(,WPROJ ,BRANCH2) + [CDBROWSER CDVAL TITLE `(,WPROJ ,BRANCH2) `(BRANCH1 ,WPROJ BRANCH2 ,BRANCH2 SUBDIR ,SUBDIR LABELFN GIT-CD-LABELFN PROJECT ,PROJECT) GIT-CDBROWSER-SEPARATE-DIRECTIONS `(Compare See "" Copy% <- (|Delete ALL <-| GIT-CD-MENUFN) - ,@(CL:UNLESS (GIT-MAINBRANCH? BRANCH2 PROJECT T) - '("" Copy% -> (Delete% -> GIT-CD-MENUFN)))] - (CONS (CONCAT SUBDIR "/") - (for CDENTRY in (fetch CDENTRIES of CDVAL) - collect (fetch MATCHNAME of CDENTRY))) - (add NENTRIES (LENGTH (fetch (CDVALUE CDENTRIES) of CDVAL] - (SETQ LAST-WMEDLEY-CDVALUES $$VAL) - (TERPRI T) - (RETURN (LIST NENTRIES (CL:IF (EQ NENTRIES 1) + ,@(CL:UNLESS (GIT-MAINBRANCH? BRANCH2 PROJECT T) + '("" (Copy% -> GIT-CD-MENUFN NIL T) + (Delete% -> GIT-CD-MENUFN)))] + (CONS (CONCAT SUBDIR "/") + (for CDENTRY in (fetch CDENTRIES of CDVAL) + collect (fetch MATCHNAME of CDENTRY))) + (add NENTRIES (LENGTH (fetch (CDVALUE CDENTRIES) of CDVAL] + (SETQ LAST-WMEDLEY-CDVALUES $$VAL) + (TERPRI T) + (RETURN (LIST NENTRIES (CL:IF (EQ NENTRIES 1) 'difference 'differences)]) @@ -2210,7 +2213,8 @@ (OR LABEL2 FILE2]) (GIT-CD-MENUFN - [LAMBDA (TBITEM MENUITEM CDBROWSER KEY) (* ; "Edited 21-Sep-2022 21:34 by rmk") + [LAMBDA (TBITEM MENUITEM CDBROWSER KEY) (* ; "Edited 25-Oct-2025 23:44 by rmk") + (* ; "Edited 21-Sep-2022 21:34 by rmk") (* ; "Edited 22-May-2022 19:13 by rmk") (* ; "Edited 8-May-2022 09:26 by rmk") (* ; "Edited 10-Dec-2021 08:52 by rmk") @@ -2246,6 +2250,7 @@ (GIT-DELETE-FILE FILE2 (LISTGET USERDATA 'PROJECT)) (MYMEDLEY-DELETE-FILES FILE1 (LISTGET USERDATA 'PROJECT)) (TB.DELETE.ITEM CDBROWSER TBITEM))) + (Copy% -> (CDBROWSER-COPY CDBROWSER TBITEM 'LEFT (CADDDR MENUITEM))) (SHOULDNT]) (GIT-WORKING-COMPARE-FILES @@ -2446,33 +2451,33 @@ (PUTPROPS GITFNS FILETYPE :TCOMPL) (DECLARE%: DONTCOPY - (FILEMAP (NIL (4198 21307 (GIT-CLONEP 4208 . 5646) (GIT-INIT 5648 . 6278) (GIT-MAKE-PROJECT 6280 . -14365) (GIT-GET-PROJECT 14367 . 16292) (GIT-PUT-PROJECT-FIELD 16294 . 17935) (GIT-PROJECT-PATH 17937 - . 18981) (FIND-ANCESTOR-DIRECTORY 18983 . 19332) (GIT-FIND-CLONE 19334 . 20415) (GIT-MAINBRANCH 20417 - . 20812) (GIT-MAINBRANCH? 20814 . 21305)) (26770 31699 (PRC-COMMAND 26780 . 31697)) (31755 34543 ( -ALLSUBDIRS 31765 . 33051) (MEDLEYSUBDIRS 33053 . 33746) (GITSUBDIRS 33748 . 34541)) (34544 39334 ( -TOGIT 34554 . 35960) (FROMGIT 35962 . 36943) (GIT-DELETE-FILE 36945 . 37791) (MYMEDLEY-DELETE-FILES -37793 . 39332)) (39335 42338 (MYMEDLEYSUBDIR 39345 . 39801) (GITSUBDIR 39803 . 40246) (STRIPDIR 40248 - . 40619) (STRIPHOST 40621 . 40861) (STRIPNAME 40863 . 41616) (STRIPWHERE 41618 . 42336)) (42339 44241 - (GFILE4MFILE 42349 . 42712) (MFILE4GFILE 42714 . 43283) (GIT-REPO-FILENAME 43285 . 44239)) (44290 -54545 (GIT-COMMIT 44300 . 45126) (GIT-PUSH 45128 . 45888) (GIT-PULL 45890 . 46642) (GIT-APPROVAL 46644 - . 46993) (GIT-GET-FILE 46995 . 48910) (GIT-FILE-EXISTS? 48912 . 49186) (GIT-REMOTE-UPDATE 49188 . -50023) (GIT-REMOTE-ADD 50025 . 50332) (GIT-FILE-DATE 50334 . 51381) (GIT-FILE-HISTORY 51383 . 53317) ( -GIT-PRINT-FILE-HISTORY 53319 . 54369) (GIT-FETCH 54371 . 54543)) (54575 66055 (GIT-BRANCH-DIFF 54585 - . 61474) (GIT-COMMIT-DIFFS 61476 . 62367) (GIT-BRANCH-RELATIONS 62369 . 66053)) (66100 84839 ( -GIT-BRANCH-NUM 66110 . 66683) (GIT-CHECKOUT 66685 . 67971) (GIT-WHICH-BRANCH 67973 . 68380) ( -GIT-MAKE-BRANCH 68382 . 70961) (GIT-BRANCHES 70963 . 73558) (GIT-BRANCH-EXISTS? 73560 . 74431) ( -GIT-PICK-BRANCH 74433 . 74923) (GIT-BRANCH-MENU 74925 . 75806) (GIT-BRANCH-WHENSELECTEDFN 75808 . -77347) (GIT-PULL-REQUESTS 77349 . 81220) (GIT-SHORT-BRANCH-NAME 81222 . 81513) (GIT-LONG-NAME 81515 . -81832) (GIT-PRC-BRANCHES 81834 . 84837)) (84869 88317 (GIT-MY-CURRENT-BRANCH 84879 . 85249) ( -GIT-MY-BRANCHP 85251 . 85869) (GIT-MY-NEXT-BRANCH 85871 . 86365) (GIT-MY-BRANCHES 86367 . 88315)) ( -88363 92438 (GIT-ADD-WORKTREE 88373 . 89980) (GIT-REMOVE-WORKTREE 89982 . 90912) (GIT-LIST-WORKTREES -90914 . 91718) (WORKTREEDIR 91720 . 92436)) (92486 126571 (GIT-GET-DIFFERENT-FILES 92496 . 99404) ( -GIT-BRANCHES-COMPARE-DIRECTORIES 99406 . 106845) (GIT-WORKING-COMPARE-DIRECTORIES 106847 . 112554) ( -GIT-COMPARE-WORKTREE 112556 . 116534) (GITCDOBJBUTTONFN 116536 . 121026) (GIT-CD-LABELFN 121028 . -122110) (GIT-CD-MENUFN 122112 . 124552) (GIT-WORKING-COMPARE-FILES 124554 . 125174) ( -GIT-BRANCHES-COMPARE-FILES 125176 . 126340) (GIT-PR-COMPARE 126342 . 126569)) (126641 134964 (CDGITDIR - 126651 . 127338) (GIT-COMMAND 127340 . 128898) (GITORIGIN 128900 . 129597) (GIT-INITIALS 129599 . -129903) (GIT-COMMAND-TO-FILE 129905 . 133390) (GIT-RESULT-TO-LINES 133392 . 134297) (STRIPLOCAL 134299 - . 134962))))) + (FILEMAP (NIL (4243 21049 (GIT-CLONEP 4253 . 5684) (GIT-INIT 5686 . 6316) (GIT-MAKE-PROJECT 6318 . +14107) (GIT-GET-PROJECT 14109 . 16034) (GIT-PUT-PROJECT-FIELD 16036 . 17677) (GIT-PROJECT-PATH 17679 + . 18723) (FIND-ANCESTOR-DIRECTORY 18725 . 19074) (GIT-FIND-CLONE 19076 . 20157) (GIT-MAINBRANCH 20159 + . 20554) (GIT-MAINBRANCH? 20556 . 21047)) (26512 31441 (PRC-COMMAND 26522 . 31439)) (31497 34285 ( +ALLSUBDIRS 31507 . 32793) (MEDLEYSUBDIRS 32795 . 33488) (GITSUBDIRS 33490 . 34283)) (34286 39076 ( +TOGIT 34296 . 35702) (FROMGIT 35704 . 36685) (GIT-DELETE-FILE 36687 . 37533) (MYMEDLEY-DELETE-FILES +37535 . 39074)) (39077 42080 (MYMEDLEYSUBDIR 39087 . 39543) (GITSUBDIR 39545 . 39988) (STRIPDIR 39990 + . 40361) (STRIPHOST 40363 . 40603) (STRIPNAME 40605 . 41358) (STRIPWHERE 41360 . 42078)) (42081 44316 + (GFILE4MFILE 42091 . 42787) (MFILE4GFILE 42789 . 43358) (GIT-REPO-FILENAME 43360 . 44314)) (44365 +54620 (GIT-COMMIT 44375 . 45201) (GIT-PUSH 45203 . 45963) (GIT-PULL 45965 . 46717) (GIT-APPROVAL 46719 + . 47068) (GIT-GET-FILE 47070 . 48985) (GIT-FILE-EXISTS? 48987 . 49261) (GIT-REMOTE-UPDATE 49263 . +50098) (GIT-REMOTE-ADD 50100 . 50407) (GIT-FILE-DATE 50409 . 51456) (GIT-FILE-HISTORY 51458 . 53392) ( +GIT-PRINT-FILE-HISTORY 53394 . 54444) (GIT-FETCH 54446 . 54618)) (54650 66130 (GIT-BRANCH-DIFF 54660 + . 61549) (GIT-COMMIT-DIFFS 61551 . 62442) (GIT-BRANCH-RELATIONS 62444 . 66128)) (66175 84914 ( +GIT-BRANCH-NUM 66185 . 66758) (GIT-CHECKOUT 66760 . 68046) (GIT-WHICH-BRANCH 68048 . 68455) ( +GIT-MAKE-BRANCH 68457 . 71036) (GIT-BRANCHES 71038 . 73633) (GIT-BRANCH-EXISTS? 73635 . 74506) ( +GIT-PICK-BRANCH 74508 . 74998) (GIT-BRANCH-MENU 75000 . 75881) (GIT-BRANCH-WHENSELECTEDFN 75883 . +77422) (GIT-PULL-REQUESTS 77424 . 81295) (GIT-SHORT-BRANCH-NAME 81297 . 81588) (GIT-LONG-NAME 81590 . +81907) (GIT-PRC-BRANCHES 81909 . 84912)) (84944 88392 (GIT-MY-CURRENT-BRANCH 84954 . 85324) ( +GIT-MY-BRANCHP 85326 . 85944) (GIT-MY-NEXT-BRANCH 85946 . 86440) (GIT-MY-BRANCHES 86442 . 88390)) ( +88438 92513 (GIT-ADD-WORKTREE 88448 . 90055) (GIT-REMOVE-WORKTREE 90057 . 90987) (GIT-LIST-WORKTREES +90989 . 91793) (WORKTREEDIR 91795 . 92511)) (92561 126762 (GIT-GET-DIFFERENT-FILES 92571 . 99479) ( +GIT-BRANCHES-COMPARE-DIRECTORIES 99481 . 106920) (GIT-WORKING-COMPARE-DIRECTORIES 106922 . 112559) ( +GIT-COMPARE-WORKTREE 112561 . 116539) (GITCDOBJBUTTONFN 116541 . 121031) (GIT-CD-LABELFN 121033 . +122115) (GIT-CD-MENUFN 122117 . 124743) (GIT-WORKING-COMPARE-FILES 124745 . 125365) ( +GIT-BRANCHES-COMPARE-FILES 125367 . 126531) (GIT-PR-COMPARE 126533 . 126760)) (126832 135155 (CDGITDIR + 126842 . 127529) (GIT-COMMAND 127531 . 129089) (GITORIGIN 129091 . 129788) (GIT-INITIALS 129790 . +130094) (GIT-COMMAND-TO-FILE 130096 . 133581) (GIT-RESULT-TO-LINES 133583 . 134488) (STRIPLOCAL 134490 + . 135153))))) STOP diff --git a/lispusers/GITFNS.LCOM b/lispusers/GITFNS.LCOM index ae44d0996852983046af0f6f64d4308eda593414..bab7dfcc933210d33787ba9e69c4647ac1d9dff4 100644 GIT binary patch delta 2386 zcmZuzU2GIp6yE7l3QJpS3PHu->Bvt@nC;A+J2Sf*z|QVY+p)7V%gk({hzSWTxB)3? ztI`;<34vFYTwV}-sSipFRM=wTi@cafOf>Pu#E_Wy;DZtgK53#6&z;@bF6eG{&bjxV zd+#~l`OcaB+&K-^Qy`9390v%!`1{5j{Exjx#i7*TsO?w<-!en1h(_%<$~hSiWh27CIt>(6 zBZRQ3Fu=$M{jB$FcX`YXr9x3ES#D+21wJa76P8r=y_c;*7)=x$&$Y@!kSqJvr0rD# zsfZVG@3l7X<(z8dsLV_O1j2q3uH|eYkw}i*GDg-X@Dn|r782vLe3WWU)%)`+J>$n) zlLuFlt**9*cto9f!p=a^Tc z%_EWVry2Hc*A~ph4_!NjyY*+*QK4@~e&xl;Bp)4hfgM_ZuC{vN%}0xgK||K#xb-ZB zVZZE{g(B!0fwEbc*oCp77Fd;{H|_-?=<2GyV#GEwYO6L{#%Q9gWk`IwMzc_HgIW_= zjmnQ_05p|8hBj!50;P!{^lf(xsF6irbBJwV0o64)T$*%jbcpKmf0z~}1}N3RD_bs5 zl8qeYd93k7rsG2ijoqUP1xG5F{B(pQsN|bAYSsW$%U%Ggf$HjlL0St0!*p`KRq`e+ zsaPpHHWJCg9SF=}vy4s@2@VJxuEir_C}6wXCFGv2w;XKukEm)BNJ28Pr$o-SaS(_s zLumPB-v%YC0!mi_C8Na}dKvRtGhnR7OEjuMP&DO<6ex&TY>ats;-M&+_6rq-K*=gP z))ZC{C~^zJY&PD3S&v#l;~qnAv#;ry*hTZ zE6xzBl*by>ki6V3?llzS&Y5}7M}}xxv=sFswz;RLhf)P{m2gzb09BcCy}zd7^?9#2 z1u9-#3?@*@5D{KQmN%%7w)R&{2ULtdhsg~wZOu&tck{e~f_=G#4etzwtbmALof;sX zMXAal9zcnP;@c?kFr42CI;N3NXo!}0Y<3R!Xvh!|g_dRM-fgd@fGSxK_lck)zT#W6 zb0?~&j!QViyo$rvaFD5k;`GePnT45Y9E-cs^NaJdZ!CyIKoA2leZ0C*J$`C-ZU&7J zNf8bo$KGv22ogV5;V!4s!?;-zQ-B=fBN594L}UQQP!FE^ z=K0zl?7AIM>wV&3c612Q)N9dmq-SlbUw3n@(e3&YgBVBLc#)bs{c-2TDu28;pl|K# z2=x%Qk0^skm`TeIY|q7lXyg!UJ6hr$$UayKeDTEPnNIF+ysSN__o zBJPegivD4{Xu(IYDa0j7GT7yse+3BAd%uEn}O>G5MzZ=5cl z8Xtr4cTP{w>`p*`#*gOgK_^=9+=EWahyK1y*3oj}3*|{r`bya>G`fq$VhW5MogE*G z!2ixM6J4sI^hCOaeadre-$}32S_zfk4?>Fygy||H+z#$aHype^svbxbJZCuLmWt6d z`b3wc;r3R7k%Yz+h|HgVE~Ll#U%~4q4+jH*aPs!RL;(Mi@+&`^#eCE1XIn5ZFePS@ z)us7?OTBkmtA=v*sikf9{E4knEh$&F2D&X19M5w-Fyj2vwjBx3DWo$VV(5CKc{}G6 zKrQR7Z1N{ zUu%Hu=5aZx>VKPD8OzfBO}CyODcN$lzW9VlPCavcvbk%=ul4P!jog1dRQae`3vTJ` zy|YUm*js*ZrW@s~D?#Ep3Kntmqgf zN_8DWH)`3}$*MM0FsMWzhkh8E_;w zoXud;bw+@nX=>X-Kqn@+1t$->sv>PV4#rnw)hr#d(UgtGnrT9@)VtzWGb}){;1)sC zP^@og$ja&li!**J@^rUp!4bQF2c#)5lQm2<3YokhZ2`$_;@RyZOyGtH)~Sr7tkwiY zxK^l7b+duiK=GC}h^VHobD#+X`NK&29Co!eP+^|~-|-4w1_)jn$Gj*HvnH8Z?LeZ( z8xJHpTbl4$0W(nLAZGB%w57Xe}ETLpE1eRFO68QWO(2;Lf2oWjc6{U-I%Os&)K{bH8I-rDrcah9C!#pTW~}T}fMJPrD`VrQ#_?Ihxw0oVb9QFx%~_=f7{aQ=Cd#wr ziOH$yaRsP}&gDrc8yf$tb$7@j{9bD`jNbSUt(`rX6ycUIil(uBXdG1{5XXpdhR2~E zl1c%+;%xbTXW<2GZlP)q3x$GGI3d5u){Ua^ReL4AIp}Y-cB-AJR(l8)A}iBD7`I<) ztK8kY*c3Jx<7dcmIf|EHD{T{UrHd{NwWOv_pWO}7{rvCulkH%Ns1P$OSG*nmNSIL~ z+`ahPCYdwDBvSe2;xF5S2l(YHL!m#4eCTQ$e{{tUUf_kRyIN$t4{ne0b5{@TZ4pt6 zcrkg!0k@P*=aE6kV!t<*cCyI*SjKm9z*NTHTk7zTIn`3CZbrqe5ZgG|#lce1!F_xi zSNn-3`PY|mvT0V0>zew^rVD; z_sLtEv1ur90RO3GR2nek0$*Mnk_+wE|G^zI&O5&PU5)~N>&CM}t_vcvE=*