forked from pool/git
Compare commits
6 Commits
Author | SHA256 | Date | |
---|---|---|---|
fda7c73f1c | |||
972e527526 | |||
29c41e30f3 | |||
d282f59a19 | |||
449f6b4529 | |||
25bd9d7139 |
@@ -1,402 +0,0 @@
|
|||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Subject: [PATCH v2] gitk: Add support of SHA256 repo
|
|
||||||
Date: Tue, 17 Jun 2025 07:59:54 +0200
|
|
||||||
Message-ID: <20250617055957.9794-1-tiwai@suse.de>
|
|
||||||
|
|
||||||
This patch adds a basic support of SHA256 Git repository to Gitk, so
|
|
||||||
that Gitk can show and operate on both SHA1 and SHA256 repos
|
|
||||||
gracefully. Since SHA256 has a longer ID length (64 char) than SHA1
|
|
||||||
(40 char), many field widths are adjusted to fit with it.
|
|
||||||
|
|
||||||
A caveat is that the configuration of auto selection length is shared
|
|
||||||
between SHA1 and SHA256 repos. That is, once when this value is saved
|
|
||||||
and read, it's applied to both repo types, which may result in shorter
|
|
||||||
selection than the full SHA256 ID. We may introduce another
|
|
||||||
individual config for sha256 (actually I did write in the first
|
|
||||||
version), but for simplicity, the common config is used as of writing
|
|
||||||
this.
|
|
||||||
|
|
||||||
Many lines still refer "sha1" although they may point to both SHA1 and
|
|
||||||
SHA256. They are left untouched for making the changes simpler.
|
|
||||||
|
|
||||||
This patch is based on the early work by Rostislav Krasny:
|
|
||||||
https://patchwork.kernel.org/project/git/patch/pull.979.git.1623687519832.gitgitgadget@gmail.com
|
|
||||||
I refreshed, revised and extended to the latest state.
|
|
||||||
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
|
|
||||||
v1: https://lore.kernel.org/20250320154136.23262-1-tiwai@suse.de
|
|
||||||
v1->v2:
|
|
||||||
- Fix other procs using fixed 40 length
|
|
||||||
- Don't use tabs
|
|
||||||
- Drop autosellensha256 config
|
|
||||||
- Some code simplification
|
|
||||||
- Fix patch description
|
|
||||||
|
|
||||||
gitk-git/gitk | 83 +++++++++++++++++++++++++++++++++++----------------
|
|
||||||
1 file changed, 58 insertions(+), 25 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/gitk-git/gitk b/gitk-git/gitk
|
|
||||||
index 19689765cde5..04f5f5face68 100755
|
|
||||||
--- a/gitk-git/gitk
|
|
||||||
+++ b/gitk-git/gitk
|
|
||||||
@@ -394,6 +394,7 @@ proc parseviewargs {n arglist} {
|
|
||||||
|
|
||||||
proc parseviewrevs {view revs} {
|
|
||||||
global vposids vnegids
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
if {$revs eq {}} {
|
|
||||||
set revs HEAD
|
|
||||||
@@ -407,7 +408,7 @@ proc parseviewrevs {view revs} {
|
|
||||||
set badrev {}
|
|
||||||
for {set l 0} {$l < [llength $errlines]} {incr l} {
|
|
||||||
set line [lindex $errlines $l]
|
|
||||||
- if {!([string length $line] == 40 && [string is xdigit $line])} {
|
|
||||||
+ if {!([string length $line] == $hashlength && [string is xdigit $line])} {
|
|
||||||
if {[string match "fatal:*" $line]} {
|
|
||||||
if {[string match "fatal: ambiguous argument*" $line]
|
|
||||||
&& $badrev ne {}} {
|
|
||||||
@@ -624,6 +625,7 @@ proc updatecommits {} {
|
|
||||||
global hasworktree
|
|
||||||
global varcid vposids vnegids vflags vrevs
|
|
||||||
global show_notes
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set hasworktree [hasworktree]
|
|
||||||
rereadrefs
|
|
||||||
@@ -657,7 +659,7 @@ proc updatecommits {} {
|
|
||||||
# take out positive refs that we asked for before or
|
|
||||||
# that we have already seen
|
|
||||||
foreach rev $revs {
|
|
||||||
- if {[string length $rev] == 40} {
|
|
||||||
+ if {[string length $rev] == $hashlength} {
|
|
||||||
if {[lsearch -exact $oldpos $rev] < 0
|
|
||||||
&& ![info exists varcid($view,$rev)]} {
|
|
||||||
lappend newrevs $rev
|
|
||||||
@@ -1542,6 +1544,7 @@ proc getcommitlines {fd inst view updating} {
|
|
||||||
global parents children curview hlview
|
|
||||||
global idpending ordertok
|
|
||||||
global varccommits varcid varctok vtokmod vfilelimit vshortids
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set stuff [read $fd 500000]
|
|
||||||
# git log doesn't terminate the last commit with a null...
|
|
||||||
@@ -1624,7 +1627,7 @@ proc getcommitlines {fd inst view updating} {
|
|
||||||
}
|
|
||||||
set ok 1
|
|
||||||
foreach id $ids {
|
|
||||||
- if {[string length $id] != 40} {
|
|
||||||
+ if {[string length $id] != $hashlength} {
|
|
||||||
set ok 0
|
|
||||||
break
|
|
||||||
}
|
|
||||||
@@ -1870,8 +1873,8 @@ proc getcommit {id} {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
|
|
||||||
-# Expand an abbreviated commit ID to a list of full 40-char IDs that match
|
|
||||||
-# and are present in the current view.
|
|
||||||
+# Expand an abbreviated commit ID to a list of full 40-char (or 64-char
|
|
||||||
+# for SHA256 repo) IDs that match and are present in the current view.
|
|
||||||
# This is fairly slow...
|
|
||||||
proc longid {prefix} {
|
|
||||||
global varcid curview vshortids
|
|
||||||
@@ -1904,6 +1907,7 @@ proc readrefs {} {
|
|
||||||
global selecthead selectheadid
|
|
||||||
global hideremotes
|
|
||||||
global tclencoding
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
foreach v {tagids idtags headids idheads otherrefids idotherrefs} {
|
|
||||||
unset -nocomplain $v
|
|
||||||
@@ -1913,9 +1917,9 @@ proc readrefs {} {
|
|
||||||
fconfigure $refd -encoding $tclencoding
|
|
||||||
}
|
|
||||||
while {[gets $refd line] >= 0} {
|
|
||||||
- if {[string index $line 40] ne " "} continue
|
|
||||||
- set id [string range $line 0 39]
|
|
||||||
- set ref [string range $line 41 end]
|
|
||||||
+ if {[string index $line $hashlength] ne " "} continue
|
|
||||||
+ set id [string range $line 0 [expr {$hashlength - 1}]]
|
|
||||||
+ set ref [string range $line [expr {$hashlength + 1}] end]
|
|
||||||
if {![string match "refs/*" $ref]} continue
|
|
||||||
set name [string range $ref 5 end]
|
|
||||||
if {[string match "remotes/*" $name]} {
|
|
||||||
@@ -2210,6 +2214,7 @@ proc makewindow {} {
|
|
||||||
global have_tk85 have_tk86 use_ttk NS
|
|
||||||
global git_version
|
|
||||||
global worddiff
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
# The "mc" arguments here are purely so that xgettext
|
|
||||||
# sees the following string as needing to be translated
|
|
||||||
@@ -2335,7 +2340,7 @@ proc makewindow {} {
|
|
||||||
-command gotocommit -width 8
|
|
||||||
$sha1but conf -disabledforeground [$sha1but cget -foreground]
|
|
||||||
pack .tf.bar.sha1label -side left
|
|
||||||
- ${NS}::entry $sha1entry -width 40 -font textfont -textvariable sha1string
|
|
||||||
+ ${NS}::entry $sha1entry -width $hashlength -font textfont -textvariable sha1string
|
|
||||||
trace add variable sha1string write sha1change
|
|
||||||
pack $sha1entry -side left -pady 2
|
|
||||||
|
|
||||||
@@ -4062,6 +4067,7 @@ proc stopblaming {} {
|
|
||||||
|
|
||||||
proc read_line_source {fd inst} {
|
|
||||||
global blamestuff curview commfd blameinst nullid nullid2
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
while {[gets $fd line] >= 0} {
|
|
||||||
lappend blamestuff($inst) $line
|
|
||||||
@@ -4082,7 +4088,7 @@ proc read_line_source {fd inst} {
|
|
||||||
set line [split [lindex $blamestuff($inst) 0] " "]
|
|
||||||
set id [lindex $line 0]
|
|
||||||
set lnum [lindex $line 1]
|
|
||||||
- if {[string length $id] == 40 && [string is xdigit $id] &&
|
|
||||||
+ if {[string length $id] == $hashlength && [string is xdigit $id] &&
|
|
||||||
[string is digit -strict $lnum]} {
|
|
||||||
# look for "filename" line
|
|
||||||
foreach l $blamestuff($inst) {
|
|
||||||
@@ -5226,11 +5232,13 @@ proc askrelhighlight {row id} {
|
|
||||||
# Graph layout functions
|
|
||||||
|
|
||||||
proc shortids {ids} {
|
|
||||||
+ global hashlength
|
|
||||||
+
|
|
||||||
set res {}
|
|
||||||
foreach id $ids {
|
|
||||||
if {[llength $id] > 1} {
|
|
||||||
lappend res [shortids $id]
|
|
||||||
- } elseif {[regexp {^[0-9a-f]{40}$} $id]} {
|
|
||||||
+ } elseif {[regexp [string map "@@ $hashlength" {^[0-9a-f]{@@}$}] $id]} {
|
|
||||||
lappend res [string range $id 0 7]
|
|
||||||
} else {
|
|
||||||
lappend res $id
|
|
||||||
@@ -5405,13 +5413,14 @@ proc get_viewmainhead {view} {
|
|
||||||
# git rev-list should give us just 1 line to use as viewmainheadid($view)
|
|
||||||
proc getviewhead {fd inst view} {
|
|
||||||
global viewmainheadid commfd curview viewinstances showlocalchanges
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set id {}
|
|
||||||
if {[gets $fd line] < 0} {
|
|
||||||
if {![eof $fd]} {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
- } elseif {[string length $line] == 40 && [string is xdigit $line]} {
|
|
||||||
+ } elseif {[string length $line] == $hashlength && [string is xdigit $line]} {
|
|
||||||
set id $line
|
|
||||||
}
|
|
||||||
set viewmainheadid($view) $id
|
|
||||||
@@ -7175,10 +7184,11 @@ proc commit_descriptor {p} {
|
|
||||||
# Also look for URLs of the form "http[s]://..." and make them web links.
|
|
||||||
proc appendwithlinks {text tags} {
|
|
||||||
global ctext linknum curview
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set start [$ctext index "end - 1c"]
|
|
||||||
$ctext insert end $text $tags
|
|
||||||
- set links [regexp -indices -all -inline {(?:\m|-g)[0-9a-f]{6,40}\M} $text]
|
|
||||||
+ set links [regexp -indices -all -inline [string map "@@ $hashlength" {(?:\m|-g)[0-9a-f]{6,@@}\M}] $text]
|
|
||||||
foreach l $links {
|
|
||||||
set s [lindex $l 0]
|
|
||||||
set e [lindex $l 1]
|
|
||||||
@@ -7206,13 +7216,14 @@ proc appendwithlinks {text tags} {
|
|
||||||
proc setlink {id lk} {
|
|
||||||
global curview ctext pendinglinks
|
|
||||||
global linkfgcolor
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
if {[string range $id 0 1] eq "-g"} {
|
|
||||||
set id [string range $id 2 end]
|
|
||||||
}
|
|
||||||
|
|
||||||
set known 0
|
|
||||||
- if {[string length $id] < 40} {
|
|
||||||
+ if {[string length $id] < $hashlength} {
|
|
||||||
set matches [longid $id]
|
|
||||||
if {[llength $matches] > 0} {
|
|
||||||
if {[llength $matches] > 1} return
|
|
||||||
@@ -8857,13 +8868,16 @@ proc incrfont {inc} {
|
|
||||||
|
|
||||||
proc clearsha1 {} {
|
|
||||||
global sha1entry sha1string
|
|
||||||
- if {[string length $sha1string] == 40} {
|
|
||||||
+ global hashlength
|
|
||||||
+
|
|
||||||
+ if {[string length $sha1string] == $hashlength} {
|
|
||||||
$sha1entry delete 0 end
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
proc sha1change {n1 n2 op} {
|
|
||||||
global sha1string currentid sha1but
|
|
||||||
+
|
|
||||||
if {$sha1string == {}
|
|
||||||
|| ([info exists currentid] && $sha1string == $currentid)} {
|
|
||||||
set state disabled
|
|
||||||
@@ -8880,6 +8894,7 @@ proc sha1change {n1 n2 op} {
|
|
||||||
|
|
||||||
proc gotocommit {} {
|
|
||||||
global sha1string tagids headids curview varcid
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
if {$sha1string == {}
|
|
||||||
|| ([info exists currentid] && $sha1string == $currentid)} return
|
|
||||||
@@ -8889,7 +8904,7 @@ proc gotocommit {} {
|
|
||||||
set id $headids($sha1string)
|
|
||||||
} else {
|
|
||||||
set id [string tolower $sha1string]
|
|
||||||
- if {[regexp {^[0-9a-f]{4,39}$} $id]} {
|
|
||||||
+ if {[regexp {^[0-9a-f]{4,63}$} $id]} {
|
|
||||||
set matches [longid $id]
|
|
||||||
if {$matches ne {}} {
|
|
||||||
if {[llength $matches] > 1} {
|
|
||||||
@@ -9378,6 +9393,7 @@ proc doseldiff {oldid newid} {
|
|
||||||
|
|
||||||
proc mkpatch {} {
|
|
||||||
global rowmenuid currentid commitinfo patchtop patchnum NS
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
if {![info exists currentid]} return
|
|
||||||
set oldid $currentid
|
|
||||||
@@ -9392,7 +9408,7 @@ proc mkpatch {} {
|
|
||||||
${NS}::label $top.title -text [mc "Generate patch"]
|
|
||||||
grid $top.title - -pady 10
|
|
||||||
${NS}::label $top.from -text [mc "From:"]
|
|
||||||
- ${NS}::entry $top.fromsha1 -width 40
|
|
||||||
+ ${NS}::entry $top.fromsha1 -width $hashlength
|
|
||||||
$top.fromsha1 insert 0 $oldid
|
|
||||||
$top.fromsha1 conf -state readonly
|
|
||||||
grid $top.from $top.fromsha1 -sticky w
|
|
||||||
@@ -9401,7 +9417,7 @@ proc mkpatch {} {
|
|
||||||
$top.fromhead conf -state readonly
|
|
||||||
grid x $top.fromhead -sticky w
|
|
||||||
${NS}::label $top.to -text [mc "To:"]
|
|
||||||
- ${NS}::entry $top.tosha1 -width 40
|
|
||||||
+ ${NS}::entry $top.tosha1 -width $hashlength
|
|
||||||
$top.tosha1 insert 0 $newid
|
|
||||||
$top.tosha1 conf -state readonly
|
|
||||||
grid $top.to $top.tosha1 -sticky w
|
|
||||||
@@ -9470,6 +9486,7 @@ proc mkpatchcan {} {
|
|
||||||
|
|
||||||
proc mktag {} {
|
|
||||||
global rowmenuid mktagtop commitinfo NS
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set top .maketag
|
|
||||||
set mktagtop $top
|
|
||||||
@@ -9479,7 +9496,7 @@ proc mktag {} {
|
|
||||||
${NS}::label $top.title -text [mc "Create tag"]
|
|
||||||
grid $top.title - -pady 10
|
|
||||||
${NS}::label $top.id -text [mc "ID:"]
|
|
||||||
- ${NS}::entry $top.sha1 -width 40
|
|
||||||
+ ${NS}::entry $top.sha1 -width $hashlength
|
|
||||||
$top.sha1 insert 0 $rowmenuid
|
|
||||||
$top.sha1 conf -state readonly
|
|
||||||
grid $top.id $top.sha1 -sticky w
|
|
||||||
@@ -9587,10 +9604,11 @@ proc mktaggo {} {
|
|
||||||
|
|
||||||
proc copyreference {} {
|
|
||||||
global rowmenuid autosellen
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set format "%h (\"%s\", %ad)"
|
|
||||||
set cmd [list git show -s --pretty=format:$format --date=short]
|
|
||||||
- if {$autosellen < 40} {
|
|
||||||
+ if {$autosellen < $hashlength} {
|
|
||||||
lappend cmd --abbrev=$autosellen
|
|
||||||
}
|
|
||||||
set reference [eval exec $cmd $rowmenuid]
|
|
||||||
@@ -9601,6 +9619,7 @@ proc copyreference {} {
|
|
||||||
|
|
||||||
proc writecommit {} {
|
|
||||||
global rowmenuid wrcomtop commitinfo wrcomcmd NS
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set top .writecommit
|
|
||||||
set wrcomtop $top
|
|
||||||
@@ -9610,7 +9629,7 @@ proc writecommit {} {
|
|
||||||
${NS}::label $top.title -text [mc "Write commit to file"]
|
|
||||||
grid $top.title - -pady 10
|
|
||||||
${NS}::label $top.id -text [mc "ID:"]
|
|
||||||
- ${NS}::entry $top.sha1 -width 40
|
|
||||||
+ ${NS}::entry $top.sha1 -width $hashlength
|
|
||||||
$top.sha1 insert 0 $rowmenuid
|
|
||||||
$top.sha1 conf -state readonly
|
|
||||||
grid $top.id $top.sha1 -sticky w
|
|
||||||
@@ -9690,6 +9709,7 @@ proc mvbranch {} {
|
|
||||||
|
|
||||||
proc branchdia {top valvar uivar} {
|
|
||||||
global NS commitinfo
|
|
||||||
+ global hashlength
|
|
||||||
upvar $valvar val $uivar ui
|
|
||||||
|
|
||||||
catch {destroy $top}
|
|
||||||
@@ -9698,7 +9718,7 @@ proc branchdia {top valvar uivar} {
|
|
||||||
${NS}::label $top.title -text $ui(title)
|
|
||||||
grid $top.title - -pady 10
|
|
||||||
${NS}::label $top.id -text [mc "ID:"]
|
|
||||||
- ${NS}::entry $top.sha1 -width 40
|
|
||||||
+ ${NS}::entry $top.sha1 -width $hashlength
|
|
||||||
$top.sha1 insert 0 $val(id)
|
|
||||||
$top.sha1 conf -state readonly
|
|
||||||
grid $top.id $top.sha1 -sticky w
|
|
||||||
@@ -9708,7 +9728,7 @@ proc branchdia {top valvar uivar} {
|
|
||||||
grid x $top.head -sticky ew
|
|
||||||
grid columnconfigure $top 1 -weight 1
|
|
||||||
${NS}::label $top.nlab -text [mc "Name:"]
|
|
||||||
- ${NS}::entry $top.name -width 40
|
|
||||||
+ ${NS}::entry $top.name -width $hashlength
|
|
||||||
$top.name insert 0 $val(name)
|
|
||||||
grid $top.nlab $top.name -sticky w
|
|
||||||
${NS}::frame $top.buts
|
|
||||||
@@ -11697,6 +11717,7 @@ proc prefspage_general {notebook} {
|
|
||||||
global tabstop wrapcomment wrapdefault limitdiffs
|
|
||||||
global autocopy autoselect autosellen extdifftool perfile_attrs
|
|
||||||
global hideremotes want_ttk have_ttk maxrefs web_browser
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
set page [create_prefs_page $notebook.general]
|
|
||||||
|
|
||||||
@@ -11725,7 +11746,8 @@ proc prefspage_general {notebook} {
|
|
||||||
-variable autoselect
|
|
||||||
grid x $page.autoselect -sticky w
|
|
||||||
}
|
|
||||||
- spinbox $page.autosellen -from 1 -to 40 -width 4 -textvariable autosellen
|
|
||||||
+
|
|
||||||
+ spinbox $page.autosellen -from 1 -to $hashlength -width 4 -textvariable autosellen
|
|
||||||
${NS}::label $page.autosellenl -text [mc "Length of commit ID to copy"]
|
|
||||||
grid x $page.autosellenl $page.autosellen -sticky w
|
|
||||||
|
|
||||||
@@ -12491,6 +12513,17 @@ if {$tclencoding == {}} {
|
|
||||||
puts stderr "Warning: encoding $gitencoding is not supported by Tcl/Tk"
|
|
||||||
}
|
|
||||||
|
|
||||||
+# Use object format as hash algorightm (either "sha1" or "sha256")
|
|
||||||
+set hashalgorithm [exec git rev-parse --show-object-format]
|
|
||||||
+if {$hashalgorithm eq "sha1"} {
|
|
||||||
+ set hashlength 40
|
|
||||||
+} elseif {$hashalgorithm eq "sha256"} {
|
|
||||||
+ set hashlength 64
|
|
||||||
+} else {
|
|
||||||
+ puts stderr "Unknown hash algorithm: $hashalgorithm"
|
|
||||||
+ exit 1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
set gui_encoding [encoding system]
|
|
||||||
catch {
|
|
||||||
set enc [exec git config --get gui.encoding]
|
|
||||||
@@ -12545,7 +12578,7 @@ set limitdiffs 1
|
|
||||||
set datetimeformat "%Y-%m-%d %H:%M:%S"
|
|
||||||
set autocopy 0
|
|
||||||
set autoselect 1
|
|
||||||
-set autosellen 40
|
|
||||||
+set autosellen $hashlength
|
|
||||||
set perfile_attrs 0
|
|
||||||
set want_ttk 1
|
|
||||||
|
|
||||||
--
|
|
||||||
2.49.0
|
|
||||||
|
|
@@ -1,178 +0,0 @@
|
|||||||
From: Takashi Iwai <tiwai@suse.de>
|
|
||||||
Subject: [PATCH] git-gui: Add support of SHA256 repo
|
|
||||||
Date: Tue, 17 Jun 2025 08:03:59 +0200
|
|
||||||
Message-ID: <20250617060406.10159-1-tiwai@suse.de>
|
|
||||||
|
|
||||||
This patch adds the basic support of SHA256 Git repositories.
|
|
||||||
The needed changes were mostly about adjusting the fixed ID length of
|
|
||||||
SHA1 (40) to be variable depending on the repo type.
|
|
||||||
|
|
||||||
Signed-off-by: Takashi Iwai <tiwai@suse.de>
|
|
||||||
---
|
|
||||||
git-gui/git-gui.sh | 13 ++++++++++++-
|
|
||||||
git-gui/lib/blame.tcl | 12 ++++++++----
|
|
||||||
git-gui/lib/choose_repository.tcl | 8 ++++++--
|
|
||||||
git-gui/lib/remote_branch_delete.tcl | 4 +++-
|
|
||||||
4 files changed, 29 insertions(+), 8 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
|
|
||||||
index 28572c889c0e..206981190535 100755
|
|
||||||
--- a/git-gui/git-gui.sh
|
|
||||||
+++ b/git-gui/git-gui.sh
|
|
||||||
@@ -1275,6 +1275,17 @@ if {[catch {
|
|
||||||
set picked 1
|
|
||||||
}
|
|
||||||
|
|
||||||
+# Use object format as hash algorightm (either "sha1" or "sha256")
|
|
||||||
+set hashalgorithm [exec git rev-parse --show-object-format]
|
|
||||||
+if {$hashalgorithm eq "sha1"} {
|
|
||||||
+ set hashlength 40
|
|
||||||
+} elseif {$hashalgorithm eq "sha256"} {
|
|
||||||
+ set hashlength 64
|
|
||||||
+} else {
|
|
||||||
+ puts stderr "Unknown hash algorithm: $hashalgorithm"
|
|
||||||
+ exit 1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
# we expand the _gitdir when it's just a single dot (i.e. when we're being
|
|
||||||
# run from the .git dir itself) lest the routines to find the worktree
|
|
||||||
# get confused
|
|
||||||
@@ -1822,7 +1833,7 @@ proc short_path {path} {
|
|
||||||
}
|
|
||||||
|
|
||||||
set next_icon_id 0
|
|
||||||
-set null_sha1 [string repeat 0 40]
|
|
||||||
+set null_sha1 [string repeat 0 $hashlength]
|
|
||||||
|
|
||||||
proc merge_state {path new_state {head_info {}} {index_info {}}} {
|
|
||||||
global file_states next_icon_id null_sha1
|
|
||||||
diff --git a/git-gui/lib/blame.tcl b/git-gui/lib/blame.tcl
|
|
||||||
index 8441e109be32..1f0b8ea28504 100644
|
|
||||||
--- a/git-gui/lib/blame.tcl
|
|
||||||
+++ b/git-gui/lib/blame.tcl
|
|
||||||
@@ -426,6 +426,7 @@ method _kill {} {
|
|
||||||
|
|
||||||
method _load {jump} {
|
|
||||||
variable group_colors
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
_hide_tooltip $this
|
|
||||||
|
|
||||||
@@ -436,7 +437,7 @@ method _load {jump} {
|
|
||||||
$i conf -state normal
|
|
||||||
$i delete 0.0 end
|
|
||||||
foreach g [$i tag names] {
|
|
||||||
- if {[regexp {^g[0-9a-f]{40}$} $g]} {
|
|
||||||
+ if {[regexp [string map "@@ $hashlength" {^g[0-9a-f]{@@}$}] $g]} {
|
|
||||||
$i tag delete $g
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -500,6 +501,8 @@ method _load {jump} {
|
|
||||||
}
|
|
||||||
|
|
||||||
method _history_menu {} {
|
|
||||||
+ global hashlength
|
|
||||||
+
|
|
||||||
set m $w.backmenu
|
|
||||||
if {[winfo exists $m]} {
|
|
||||||
$m delete 0 end
|
|
||||||
@@ -513,7 +516,7 @@ method _history_menu {} {
|
|
||||||
set c [lindex $e 0]
|
|
||||||
set f [lindex $e 1]
|
|
||||||
|
|
||||||
- if {[regexp {^[0-9a-f]{40}$} $c]} {
|
|
||||||
+ if {[regexp [string map "@@ $hashlength" {^[0-9a-f]{@@}$}] $c]} {
|
|
||||||
set t [string range $c 0 8]...
|
|
||||||
} elseif {$c eq {}} {
|
|
||||||
set t {Working Directory}
|
|
||||||
@@ -627,6 +630,7 @@ method _exec_blame {cur_w cur_d options cur_s} {
|
|
||||||
method _read_blame {fd cur_w cur_d} {
|
|
||||||
upvar #0 $cur_d line_data
|
|
||||||
variable group_colors
|
|
||||||
+ global hashlength
|
|
||||||
|
|
||||||
if {$fd ne $current_fd} {
|
|
||||||
catch {close $fd}
|
|
||||||
@@ -635,7 +639,7 @@ method _read_blame {fd cur_w cur_d} {
|
|
||||||
|
|
||||||
$cur_w conf -state normal
|
|
||||||
while {[gets $fd line] >= 0} {
|
|
||||||
- if {[regexp {^([a-z0-9]{40}) (\d+) (\d+) (\d+)$} $line line \
|
|
||||||
+ if {[regexp [string map "@@ $hashlength" {^([a-z0-9]{@@}) (\d+) (\d+) (\d+)$}] $line line \
|
|
||||||
cmit original_line final_line line_count]} {
|
|
||||||
set r_commit $cmit
|
|
||||||
set r_orig_line $original_line
|
|
||||||
@@ -648,7 +652,7 @@ method _read_blame {fd cur_w cur_d} {
|
|
||||||
set oln $r_orig_line
|
|
||||||
set cmit $r_commit
|
|
||||||
|
|
||||||
- if {[regexp {^0{40}$} $cmit]} {
|
|
||||||
+ if {[regexp [string map "@@ $hashlength" {^0{@@}$}] $cmit]} {
|
|
||||||
set commit_abbr work
|
|
||||||
set commit_type curr_commit
|
|
||||||
} elseif {$cmit eq $commit} {
|
|
||||||
diff --git a/git-gui/lib/choose_repository.tcl b/git-gui/lib/choose_repository.tcl
|
|
||||||
index d23abedcb36f..6078b1c7e2c4 100644
|
|
||||||
--- a/git-gui/lib/choose_repository.tcl
|
|
||||||
+++ b/git-gui/lib/choose_repository.tcl
|
|
||||||
@@ -870,6 +870,8 @@ method _do_clone_HEAD {ok} {
|
|
||||||
}
|
|
||||||
|
|
||||||
method _do_clone_full_end {ok} {
|
|
||||||
+ global hashlength
|
|
||||||
+
|
|
||||||
$o_cons done $ok
|
|
||||||
|
|
||||||
if {$ok} {
|
|
||||||
@@ -879,7 +881,7 @@ method _do_clone_full_end {ok} {
|
|
||||||
if {[file exists [gitdir FETCH_HEAD]]} {
|
|
||||||
set fd [open [gitdir FETCH_HEAD] r]
|
|
||||||
while {[gets $fd line] >= 0} {
|
|
||||||
- if {[regexp "^(.{40})\t\t" $line line HEAD]} {
|
|
||||||
+ if {[regexp [string map "@@ $hashlength" "^(.{@@})\t\t"] $line line HEAD]} {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -965,6 +967,8 @@ method _do_clone_checkout {HEAD} {
|
|
||||||
}
|
|
||||||
|
|
||||||
method _readtree_wait {fd} {
|
|
||||||
+ global hashlength
|
|
||||||
+
|
|
||||||
set buf [read $fd]
|
|
||||||
$o_status_op update_meter $buf
|
|
||||||
append readtree_err $buf
|
|
||||||
@@ -986,7 +990,7 @@ method _readtree_wait {fd} {
|
|
||||||
|
|
||||||
# -- Run the post-checkout hook.
|
|
||||||
#
|
|
||||||
- set fd_ph [githook_read post-checkout [string repeat 0 40] \
|
|
||||||
+ set fd_ph [githook_read post-checkout [string repeat 0 $hashlength] \
|
|
||||||
[git rev-parse HEAD] 1]
|
|
||||||
if {$fd_ph ne {}} {
|
|
||||||
global pch_error
|
|
||||||
diff --git a/git-gui/lib/remote_branch_delete.tcl b/git-gui/lib/remote_branch_delete.tcl
|
|
||||||
index 5ba9fcadd17f..8ea672479306 100644
|
|
||||||
--- a/git-gui/lib/remote_branch_delete.tcl
|
|
||||||
+++ b/git-gui/lib/remote_branch_delete.tcl
|
|
||||||
@@ -323,6 +323,8 @@ method _load {cache uri} {
|
|
||||||
}
|
|
||||||
|
|
||||||
method _read {cache fd} {
|
|
||||||
+ global hashlength
|
|
||||||
+
|
|
||||||
if {$fd ne $active_ls} {
|
|
||||||
catch {close $fd}
|
|
||||||
return
|
|
||||||
@@ -330,7 +332,7 @@ method _read {cache fd} {
|
|
||||||
|
|
||||||
while {[gets $fd line] >= 0} {
|
|
||||||
if {[string match {*^{}} $line]} continue
|
|
||||||
- if {[regexp {^([0-9a-f]{40}) (.*)$} $line _junk obj ref]} {
|
|
||||||
+ if {[regexp [string map "@@ $hashlength" {^([0-9a-f]{@@}) (.*)$}] $line _junk obj ref]} {
|
|
||||||
if {[regsub ^refs/heads/ $ref {} abr]} {
|
|
||||||
lappend head_list $abr
|
|
||||||
lappend head_cache($cache) $abr
|
|
||||||
--
|
|
||||||
2.49.0
|
|
||||||
|
|
@@ -1,8 +1,8 @@
|
|||||||
Index: b/read-cache.c
|
Index: git/read-cache.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- a/read-cache.c
|
--- git.orig/read-cache.c
|
||||||
+++ b/read-cache.c
|
+++ git/read-cache.c
|
||||||
@@ -1158,10 +1158,13 @@ static int has_dir_name(struct index_sta
|
@@ -1135,10 +1135,13 @@ static int has_dir_name(struct index_sta
|
||||||
size_t len;
|
size_t len;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
|
@@ -2,11 +2,11 @@
|
|||||||
contrib/completion/git-completion.bash | 10 ++++++----
|
contrib/completion/git-completion.bash | 10 ++++++----
|
||||||
1 file changed, 6 insertions(+), 4 deletions(-)
|
1 file changed, 6 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
Index: git-2.43.1/contrib/completion/git-completion.bash
|
Index: git/contrib/completion/git-completion.bash
|
||||||
===================================================================
|
===================================================================
|
||||||
--- git-2.43.1.orig/contrib/completion/git-completion.bash
|
--- git.orig/contrib/completion/git-completion.bash
|
||||||
+++ git-2.43.1/contrib/completion/git-completion.bash
|
+++ git/contrib/completion/git-completion.bash
|
||||||
@@ -67,10 +67,12 @@
|
@@ -81,10 +81,12 @@
|
||||||
# case insensitively, even on systems with case sensitive file systems
|
# case insensitively, even on systems with case sensitive file systems
|
||||||
# (e.g., completing tag name "FOO" on "git checkout f<TAB>").
|
# (e.g., completing tag name "FOO" on "git checkout f<TAB>").
|
||||||
|
|
||||||
|
Binary file not shown.
@@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:dff3c000e400ace3a63b8a6f8b3b76b88ecfdffd4504a04aba4248372cdec045
|
|
||||||
size 7878256
|
|
BIN
git-2.51.0.tar.sign
Normal file
BIN
git-2.51.0.tar.sign
Normal file
Binary file not shown.
BIN
git-2.51.0.tar.xz
(Stored with Git LFS)
Normal file
BIN
git-2.51.0.tar.xz
(Stored with Git LFS)
Normal file
Binary file not shown.
@@ -4,10 +4,10 @@
|
|||||||
contrib/completion/git.tcsh | 4 ++++
|
contrib/completion/git.tcsh | 4 ++++
|
||||||
3 files changed, 15 insertions(+), 10 deletions(-)
|
3 files changed, 15 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
Index: git-2.11.0/contrib/completion/git-completion.tcsh
|
Index: git/contrib/completion/git-completion.tcsh
|
||||||
===================================================================
|
===================================================================
|
||||||
--- git-2.11.0.orig/contrib/completion/git-completion.tcsh
|
--- git.orig/contrib/completion/git-completion.tcsh
|
||||||
+++ git-2.11.0/contrib/completion/git-completion.tcsh
|
+++ git/contrib/completion/git-completion.tcsh
|
||||||
@@ -32,14 +32,14 @@ if ( ${__git_tcsh_completion_version[1]}
|
@@ -32,14 +32,14 @@ if ( ${__git_tcsh_completion_version[1]}
|
||||||
endif
|
endif
|
||||||
unset __git_tcsh_completion_version
|
unset __git_tcsh_completion_version
|
||||||
@@ -30,26 +30,26 @@ Index: git-2.11.0/contrib/completion/git-completion.tcsh
|
|||||||
|
|
||||||
cat << EOF >! ${__git_tcsh_completion_script}
|
cat << EOF >! ${__git_tcsh_completion_script}
|
||||||
#!bash
|
#!bash
|
||||||
@@ -121,6 +121,3 @@ EOF
|
@@ -122,6 +122,3 @@ EOF
|
||||||
|
|
||||||
# Don't need this variable anymore, so don't pollute the users environment
|
# Don't need this variable anymore, so don't pollute the users environment
|
||||||
unset __git_tcsh_completion_original_script
|
unset __git_tcsh_completion_original_script
|
||||||
-
|
-
|
||||||
-complete git 'p,*,`bash ${__git_tcsh_completion_script} git "${COMMAND_LINE}"`,'
|
-complete git 'p,*,`bash ${__git_tcsh_completion_script} git "${COMMAND_LINE}"`,'
|
||||||
-complete gitk 'p,*,`bash ${__git_tcsh_completion_script} gitk "${COMMAND_LINE}"`,'
|
-complete gitk 'p,*,`bash ${__git_tcsh_completion_script} gitk "${COMMAND_LINE}"`,'
|
||||||
Index: git-2.11.0/contrib/completion/git.csh
|
Index: git/contrib/completion/git.csh
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ git-2.11.0/contrib/completion/git.csh
|
+++ git/contrib/completion/git.csh
|
||||||
@@ -0,0 +1,4 @@
|
@@ -0,0 +1,4 @@
|
||||||
+if (${?prompt}) then
|
+if (${?prompt}) then
|
||||||
+complete git 'p,*,`bash /usr/share/tcsh/git.complete git "${COMMAND_LINE}"`,'
|
+complete git 'p,*,`bash /usr/share/tcsh/git.complete git "${COMMAND_LINE}"`,'
|
||||||
+complete gitk 'p,*,`bash /usr/share/tcsh/git.complete gitk "${COMMAND_LINE}"`,'
|
+complete gitk 'p,*,`bash /usr/share/tcsh/git.complete gitk "${COMMAND_LINE}"`,'
|
||||||
+endif
|
+endif
|
||||||
Index: git-2.11.0/contrib/completion/git.tcsh
|
Index: git/contrib/completion/git.tcsh
|
||||||
===================================================================
|
===================================================================
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ git-2.11.0/contrib/completion/git.tcsh
|
+++ git/contrib/completion/git.tcsh
|
||||||
@@ -0,0 +1,4 @@
|
@@ -0,0 +1,4 @@
|
||||||
+if (${?prompt}) then
|
+if (${?prompt}) then
|
||||||
+complete git 'p,*,`bash /usr/share/tcsh/git.complete git "${COMMAND_LINE}"`,'
|
+complete git 'p,*,`bash /usr/share/tcsh/git.complete git "${COMMAND_LINE}"`,'
|
||||||
|
347
git.changes
347
git.changes
@@ -1,3 +1,348 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Aug 20 14:22:54 UTC 2025 - Antonio Teixeira <antonio.teixeira@suse.com>
|
||||||
|
|
||||||
|
- Use zlib instead of zlib-ng for SLES16
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Aug 18 18:38:01 UTC 2025 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
|
- Update to 2.51.0
|
||||||
|
- UI, Workflows & Features
|
||||||
|
- Userdiff patterns for the R language have been added.
|
||||||
|
- Documentation for "git send-email" has been updated with a
|
||||||
|
bit more credential helper and OAuth information.
|
||||||
|
- "git cat-file --batch" learns to understand %(objectmode)
|
||||||
|
atom to allow the caller to tell missing objects (due to
|
||||||
|
repository corruption) and submodules (whose commit objects
|
||||||
|
are OK to be missing) apart.
|
||||||
|
- "git diff --no-index dirA dirB" can limit the comparison with
|
||||||
|
pathspec at the end of the command line, just like normal
|
||||||
|
"git diff".
|
||||||
|
- "git subtree" (in contrib/) learned to grok GPG signing its
|
||||||
|
commits.
|
||||||
|
- "git whatchanged" that is longer to type than "git log --raw"
|
||||||
|
which is its modern rough equivalent has outlived its
|
||||||
|
usefulness more than 10 years ago. Plan to deprecate and
|
||||||
|
remove it.
|
||||||
|
- An interchange format for stash entries is defined, and
|
||||||
|
subcommand of "git stash" to import/export has been added.
|
||||||
|
- "git merge/pull" has been taught the "--compact-summary"
|
||||||
|
option to use the compact-summary format, intead of diffstat,
|
||||||
|
when showing the summary of the incoming changes.
|
||||||
|
- "git imap-send" has been broken for a long time, which has
|
||||||
|
been resurrected and then taught to talk OAuth2.0 etc.
|
||||||
|
- Some error messages from "git imap-send" has been updated.
|
||||||
|
- When "git daemon" sees a signal while attempting to accept()
|
||||||
|
a new client, instead of retrying, it skipped it by mistake,
|
||||||
|
which has been corrected.
|
||||||
|
- The reftable ref backend has matured enough; Git 3.0 will
|
||||||
|
make it the default format in a newly created repositories by
|
||||||
|
default.
|
||||||
|
- "netrc" credential helper has been improved to understand
|
||||||
|
textual service names (like smtp) in addition to the numeric
|
||||||
|
port numbers (like 25).
|
||||||
|
- Lift the limitation to use changed-path filter in "git log"
|
||||||
|
so that it can be used for a pathspec with multiple literal
|
||||||
|
paths.
|
||||||
|
- Clean up the way how signature on commit objects are exported
|
||||||
|
to and imported from fast-import stream.
|
||||||
|
- Remove unsupported, unused, and unsupportable old option from
|
||||||
|
"git log".
|
||||||
|
- Document recently added "git imap-send --list" with an
|
||||||
|
example.
|
||||||
|
- "git pull" learned to pay attention to pull.autostash
|
||||||
|
configuration variable, which overrides
|
||||||
|
rebase/merge.autostash.
|
||||||
|
- "git for-each-ref" learns "--start-after" option to help
|
||||||
|
applications that want to page its output.
|
||||||
|
- "git switch" and "git restore" are declared to be no longer
|
||||||
|
experimental.
|
||||||
|
- "git -c alias.foo=bar foo -h baz" reported "'foo' is aliased
|
||||||
|
to 'bar'" and then went on to run "git foo -h baz", which was
|
||||||
|
unexpected. Tighten the rule so that alias expansion is
|
||||||
|
reported only when "-h" is the sole option.
|
||||||
|
- Performance, Internal Implementation, Development Support etc.
|
||||||
|
- "git pack-objects" learned to find delta bases from blobs at
|
||||||
|
the same path, using the --path-walk API.
|
||||||
|
- CodingGuidelines update.
|
||||||
|
- Add settings for Solaris 10 & 11.
|
||||||
|
- Meson-based build/test framework now understands TAP output
|
||||||
|
generated by our tests.
|
||||||
|
- "Do not explicitly initialize to zero" rule has been
|
||||||
|
clarified in the CodingGuidelines document.
|
||||||
|
- A test helper "test_seq" function learned the "-f <fmt>"
|
||||||
|
option, which allowed us to simplify a lot of test scripts.
|
||||||
|
- A lot of stale stuff has been removed from the contrib/
|
||||||
|
hierarchy.
|
||||||
|
- "git push" and "git fetch" are taught to update refs in
|
||||||
|
batches to gain performance.
|
||||||
|
- Some code paths in "git prune" used to ignore the passed-in
|
||||||
|
repository object and used the `the_repository` singleton
|
||||||
|
instance instead, which has been corrected.
|
||||||
|
- Update ".clang-format" and ".editorconfig" to match our style
|
||||||
|
guide a bit better.
|
||||||
|
- "make coccicheck" succeeds even when spatch made suggestions,
|
||||||
|
which has been updated to fail in such a case.
|
||||||
|
- Code clean-up around object access API.
|
||||||
|
- Define .precision to more canned parse-options type to avoid
|
||||||
|
bugs coming from using a variable with a wrong type to
|
||||||
|
capture the parsed values.
|
||||||
|
- Flipping the default hash function to SHA-256 at Git 3.0
|
||||||
|
boundary is planned.
|
||||||
|
- Declare weather-balloon we raised for "bool" type 18 months
|
||||||
|
ago a success and officially allow using the type in our
|
||||||
|
codebase.
|
||||||
|
- GIT_TEST_INSTALLED was not honored in the recent topic
|
||||||
|
related to SHA256 hashes, which has been corrected.
|
||||||
|
- The pop_most_recent_commit() function can have quite
|
||||||
|
expensive worst case performance characteristics, which has
|
||||||
|
been optimized by using prio-queue data structure.
|
||||||
|
- Move structure definition from unrelated header file to where
|
||||||
|
it belongs.
|
||||||
|
- To help our developers, document what C99 language features
|
||||||
|
are being considered for adoption, in addition to what past
|
||||||
|
experiments have already decided.
|
||||||
|
- The reftable unit tests are now ported to the "clar" unit
|
||||||
|
testing framework.
|
||||||
|
- Redefine where the multi-pack-index sits in the object
|
||||||
|
subsystem, which recently was restructured to allow multiple
|
||||||
|
backends that support a single object source that belongs to
|
||||||
|
one repository. A MIDX does span multiple "object sources".
|
||||||
|
- Reduce implicit assumption and dependence on the_repository
|
||||||
|
in the object-file subsystem.
|
||||||
|
|
||||||
|
- Fixes since v2.50 Unless otherwise noted, all the changes in
|
||||||
|
2.50.X maintenance track, including security updates, are
|
||||||
|
included in this release.
|
||||||
|
- A memory-leak in an error code path has been plugged. (merge
|
||||||
|
7082da85cb ly/commit-graph-graph-write-leakfix later to
|
||||||
|
maint).
|
||||||
|
- A memory-leak in an error code path has been plugged. (merge
|
||||||
|
aedebdb6b9 ly/fetch-pack-leakfix later to maint).
|
||||||
|
- Some leftover references to documentation source files that
|
||||||
|
no longer exist, due to recent ".txt" -> ".adoc" renaming,
|
||||||
|
have been corrected. (merge 3717a5775a
|
||||||
|
jw/doc-txt-to-adoc-refs later to maint).
|
||||||
|
- "git stash -p <pathspec>" improvements. (merge 468817bab2
|
||||||
|
pw/stash-p-pathspec-fixes later to maint).
|
||||||
|
- "git send-email" incremented its internal message counter
|
||||||
|
when a message was edited, which made logic that treats the
|
||||||
|
first message specially misbehave, which has been corrected.
|
||||||
|
(merge 2cc27b3501 ag/send-email-edit-threading-fix later to
|
||||||
|
maint).
|
||||||
|
- "git stash" recorded a wrong branch name when submodules are
|
||||||
|
present in the current checkout, which has been corrected.
|
||||||
|
(merge ffb36c64f2 kj/stash-onbranch-submodule-fix later to
|
||||||
|
maint).
|
||||||
|
- When asking to apply mailmap to both author and committer
|
||||||
|
field while showing a commit object, the field that appears
|
||||||
|
later was not correctly parsed and replaced, which has been
|
||||||
|
corrected. (merge abf94a283f sa/multi-mailmap-fix later to
|
||||||
|
maint).
|
||||||
|
- "git maintenance" lacked the care "git gc" had to avoid
|
||||||
|
holding onto the repository lock for too long during packing
|
||||||
|
refs, which has been remedied. (merge 1b5074e614
|
||||||
|
ps/maintenance-ref-lock later to maint).
|
||||||
|
- Avoid regexp_constraint and instead use comparison_constraint
|
||||||
|
when listing functions to exclude from application of
|
||||||
|
coccinelle rules, as spatch can be built with different
|
||||||
|
regexp engine X-<. (merge f2ad545813
|
||||||
|
jc/cocci-avoid-regexp-constraint later to maint).
|
||||||
|
- Updating submodules from the upstream did not work well when
|
||||||
|
submodule's HEAD is detached, which has been improved. (merge
|
||||||
|
ca62f524c1 jk/submodule-remote-lookup-cleanup later to
|
||||||
|
maint).
|
||||||
|
- Remove unnecessary check from "git daemon" code. (merge
|
||||||
|
0c856224d2 cb/daemon-fd-check-fix later to maint).
|
||||||
|
- Use of sysctl() system call to learn the total RAM size used
|
||||||
|
on BSDs has been corrected. (merge 781c1cf571
|
||||||
|
cb/total-ram-bsd-fix later to maint).
|
||||||
|
- Drop FreeBSD 4 support and declare that we support only
|
||||||
|
FreeBSD 12 or later, which has memmem() supported. (merge
|
||||||
|
0392f976a7 bs/config-mak-freebsd later to maint).
|
||||||
|
- A diff-filter with negative-only specification like "git log
|
||||||
|
--diff-filter=d" did not trigger correctly, which has been
|
||||||
|
fixed. (merge 375ac087c5 jk/all-negative-diff-filter-fix
|
||||||
|
later to maint).
|
||||||
|
- A failure to open the index file for writing due to
|
||||||
|
conflicting access did not state what went wrong, which has
|
||||||
|
been corrected. (merge 9455397a5c
|
||||||
|
hy/read-cache-lock-error-fix later to maint).
|
||||||
|
- Tempfile removal fix in the codepath to sign commits with SSH
|
||||||
|
keys. (merge 4498127b04 re/ssh-sign-buffer-fix later to
|
||||||
|
maint).
|
||||||
|
- Code and test clean-up around string-list API. (merge
|
||||||
|
6e5b26c3ff sj/string-list later to maint).
|
||||||
|
- "git apply -N" should start from the current index and
|
||||||
|
register only new files, but it instead started from an empty
|
||||||
|
index, which has been corrected. (merge 2b49d97fcb
|
||||||
|
rp/apply-intent-to-add-fix later to maint).
|
||||||
|
- Leakfix with a new and a bit invasive test on pack-bitmap
|
||||||
|
files. (merge bfd5522e98 ly/load-bitmap-leakfix later to
|
||||||
|
maint).
|
||||||
|
- "git fetch --prune" used to be O(n^2) expensive when there
|
||||||
|
are many refs, which has been corrected. (merge 87d8d8c5d0
|
||||||
|
ph/fetch-prune-optim later to maint).
|
||||||
|
- When a ref creation at refs/heads/foo/bar fails, the files
|
||||||
|
backend now removes refs/heads/foo/ if the directory is
|
||||||
|
otherwise not used. (merge a3a7f20516
|
||||||
|
ps/refs-files-remove-empty-parent later to maint).
|
||||||
|
- "pack-objects" has been taught to avoid pointing into objects
|
||||||
|
in cruft packs from midx.
|
||||||
|
- "git remote" now detects remote names that overlap with each
|
||||||
|
other (e.g., remote nickname "outer" and "outer/inner" are
|
||||||
|
used at the same time), as it will lead to overlapping
|
||||||
|
remote-tracking branches. (merge a5a727c448
|
||||||
|
jk/remote-avoid-overlapping-names later to maint).
|
||||||
|
- The gpg.program configuration variable, which names a
|
||||||
|
pathname to the (custom) GPG compatible program, can now be
|
||||||
|
spelled with ~tilde expansion. (merge 7d275cd5c0
|
||||||
|
jb/gpg-program-variable-is-a-pathname later to maint).
|
||||||
|
- Our <sane-ctype.h> header file relied on that the
|
||||||
|
system-supplied <ctype.h> header is not later included, which
|
||||||
|
would override our macro definitions, but "amazon linux"
|
||||||
|
broke this assumption. Fix this by preemptively including
|
||||||
|
<ctype.h> near the beginning of <sane-ctype.h> ourselves.
|
||||||
|
(merge 9d3b33125f ps/sane-ctype-workaround later to maint).
|
||||||
|
- Clean-up compat/bswap.h mess. (merge f4ac32c03a
|
||||||
|
ss/compat-bswap-revamp later to maint).
|
||||||
|
- Meson-based build did not handle libexecdir setting
|
||||||
|
correctly, which has been corrected. (merge 056dbe8612
|
||||||
|
rj/meson-libexecdir-fix later to maint).
|
||||||
|
- Document that we do not require "real" name when signing your
|
||||||
|
patches off. (merge 1f0fed312a
|
||||||
|
bc/contribution-under-non-real-names later to maint).
|
||||||
|
- "git commit" that concludes a conflicted merge failed to
|
||||||
|
notice and remove existing comment added automatically (like
|
||||||
|
"# Conflicts:") when the core.commentstring is set to 'auto'.
|
||||||
|
(merge 92b7c7c9f5 ac/auto-comment-char-fix later to maint).
|
||||||
|
- "git rebase -i" with bogus rebase.instructionFormat
|
||||||
|
configuration failed to produce the todo file after recording
|
||||||
|
the state files, leading to confused "git status"; this has
|
||||||
|
been corrected. (merge ade14bffd7
|
||||||
|
ow/rebase-verify-insn-fmt-before-initializing-state later to
|
||||||
|
maint).
|
||||||
|
- A few file descriptors left unclosed upon program completion
|
||||||
|
in a few test helper programs are now closed. (merge
|
||||||
|
0f1b33815b hl/test-helper-fd-close later to maint).
|
||||||
|
- Interactive prompt code did not correctly strip CRLF from the
|
||||||
|
end of line on Windows. (merge 711a20827b js/prompt-crlf-fix
|
||||||
|
later to maint).
|
||||||
|
- The config API had a set of convenience wrapper functions
|
||||||
|
that implicitly use the_repository instance; they have been
|
||||||
|
removed and inlined at the calling sites.
|
||||||
|
- "git add/etc -p" now honor the diff.context configuration
|
||||||
|
variable, and also they learn to honor the -U<n> command-line
|
||||||
|
option. (merge 2b3ae04011 lm/add-p-context later to maint).
|
||||||
|
- The case where a new submodule takes a path where there used
|
||||||
|
to be a completely different subproject is now dealt with a
|
||||||
|
bit better than before. (merge 5ed8c5b465
|
||||||
|
kj/renamed-submodule later to maint).
|
||||||
|
- The deflate codepath in "git archive --format=zip" had a
|
||||||
|
longstanding bug coming from misuse of zlib API, which has
|
||||||
|
been corrected.
|
||||||
|
- drop patches included in update:
|
||||||
|
0001-git-gui-Replace-null_sha1-with-nullid.patch
|
||||||
|
0001-gitk-Add-support-of-SHA256-repo.patch
|
||||||
|
0002-git-gui-Add-support-of-SHA256-repo.patch
|
||||||
|
- refreshed patches:
|
||||||
|
CVE-2024-24577.patch
|
||||||
|
completion-wordbreaks.diff
|
||||||
|
git-tcsh-completion-fixes.diff
|
||||||
|
setup-don-t-fail-if-commondir-reference-is-deleted.patch
|
||||||
|
- contrib/workdir is dropped. remove references for it.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue Jul 15 13:20:32 UTC 2025 - Takashi Iwai <tiwai@suse.com>
|
||||||
|
|
||||||
|
- update git-gui sha256 patches after the upstream review:
|
||||||
|
0001-git-gui-Replace-null_sha1-with-nullid.patch
|
||||||
|
0002-git-gui-Add-support-of-SHA256-repo.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jul 9 11:01:47 UTC 2025 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
|
- refreshed gitk sha256 patches:
|
||||||
|
0001-gitk-Add-support-of-SHA256-repo.patch
|
||||||
|
0002-git-gui-Add-support-of-SHA256-repo.patch
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Jul 9 10:48:56 UTC 2025 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
|
- update to 2.50.1 (boo#1245938 boo#1245939 boo#1245942 boo#1245943
|
||||||
|
boo#1245946 boo#1245947)
|
||||||
|
Security fixes for CVE-2025-27613, CVE-2025-27614,
|
||||||
|
CVE-2025-46334, CVE-2025-46835, CVE-2025-48384, CVE-2025-48385,
|
||||||
|
and CVE-2025-48386
|
||||||
|
|
||||||
|
CVE-2025-27613, Gitk:
|
||||||
|
|
||||||
|
When a user clones an untrusted repository and runs Gitk without
|
||||||
|
additional command arguments, any writable file can be created and
|
||||||
|
truncated. The option "Support per-file encoding" must have been
|
||||||
|
enabled. The operation "Show origin of this line" is affected as
|
||||||
|
well, regardless of the option being enabled or not.
|
||||||
|
|
||||||
|
CVE-2025-27614, Gitk:
|
||||||
|
|
||||||
|
A Git repository can be crafted in such a way that a user who has
|
||||||
|
cloned the repository can be tricked into running any script
|
||||||
|
supplied by the attacker by invoking `gitk filename`, where
|
||||||
|
`filename` has a particular structure.
|
||||||
|
|
||||||
|
CVE-2025-46334, Git GUI (Windows only):
|
||||||
|
|
||||||
|
A malicious repository can ship versions of sh.exe or typical
|
||||||
|
textconv filter programs such as astextplain. On Windows, path
|
||||||
|
lookup can find such executables in the worktree. These programs
|
||||||
|
are invoked when the user selects "Git Bash" or "Browse Files" from
|
||||||
|
the menu.
|
||||||
|
|
||||||
|
CVE-2025-46835, Git GUI:
|
||||||
|
|
||||||
|
When a user clones an untrusted repository and is tricked into
|
||||||
|
editing a file located in a maliciously named directory in the
|
||||||
|
repository, then Git GUI can create and overwrite any writable
|
||||||
|
file.
|
||||||
|
|
||||||
|
CVE-2025-48384, Git:
|
||||||
|
|
||||||
|
When reading a config value, Git strips any trailing carriage
|
||||||
|
return and line feed (CRLF). When writing a config entry, values
|
||||||
|
with a trailing CR are not quoted, causing the CR to be lost when
|
||||||
|
the config is later read. When initializing a submodule, if the
|
||||||
|
submodule path contains a trailing CR, the altered path is read
|
||||||
|
resulting in the submodule being checked out to an incorrect
|
||||||
|
location. If a symlink exists that points the altered path to the
|
||||||
|
submodule hooks directory, and the submodule contains an executable
|
||||||
|
post-checkout hook, the script may be unintentionally executed
|
||||||
|
after checkout.
|
||||||
|
|
||||||
|
CVE-2025-48385, Git:
|
||||||
|
|
||||||
|
When cloning a repository Git knows to optionally fetch a bundle
|
||||||
|
advertised by the remote server, which allows the server-side to
|
||||||
|
offload parts of the clone to a CDN. The Git client does not
|
||||||
|
perform sufficient validation of the advertised bundles, which
|
||||||
|
allows the remote side to perform protocol injection.
|
||||||
|
This protocol injection can cause the client to write the fetched
|
||||||
|
bundle to a location controlled by the adversary. The fetched
|
||||||
|
content is fully controlled by the server, which can in the worst
|
||||||
|
case lead to arbitrary code execution.
|
||||||
|
CVE-2025-48386, Git:
|
||||||
|
|
||||||
|
The wincred credential helper uses a static buffer (`target`) as a
|
||||||
|
unique key for storing and comparing against internal storage. This
|
||||||
|
credential helper does not properly bounds check the available
|
||||||
|
space remaining in the buffer before appending to it with
|
||||||
|
`wcsncat()`, leading to potential buffer overflows.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Jun 26 15:32:00 UTC 2025 - Takashi Iwai <tiwai@suse.com>
|
||||||
|
|
||||||
|
- Fix git-gui citool SHA256 repo handling:
|
||||||
|
refreshed 0002-git-gui-Add-support-of-SHA256-repo.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Jun 17 17:55:40 UTC 2025 - Marcus Rueckert <mrueckert@suse.de>
|
Tue Jun 17 17:55:40 UTC 2025 - Marcus Rueckert <mrueckert@suse.de>
|
||||||
|
|
||||||
@@ -35,7 +380,7 @@ Fri Mar 14 23:43:43 UTC 2025 - Marcus Rueckert <mrueckert@suse.de>
|
|||||||
Tue Jan 14 21:45:04 UTC 2025 - Andreas Stieger <andreas.stieger@gmx.de>
|
Tue Jan 14 21:45:04 UTC 2025 - Andreas Stieger <andreas.stieger@gmx.de>
|
||||||
|
|
||||||
- update to 2.48.1: (boo#1235600 boo#1235601)
|
- update to 2.48.1: (boo#1235600 boo#1235601)
|
||||||
* CVE-2024-50349, CVE-2024-52006:
|
* CVE-2024-50349, CVE-2024-52006:
|
||||||
refuse to accept URLs that contain control sequences
|
refuse to accept URLs that contain control sequences
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
|
12
git.spec
12
git.spec
@@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# spec file for package git
|
# spec file for package git
|
||||||
#
|
#
|
||||||
# Copyright (c) 2025 SUSE LLC
|
# Copyright (c) 2025 SUSE LLC and contributors
|
||||||
# Copyright (c) 2025 Andreas Stieger <Andreas.Stieger@gmx.de>
|
# Copyright (c) 2025 Andreas Stieger <Andreas.Stieger@gmx.de>
|
||||||
#
|
#
|
||||||
# All modifications and additions to the file contributed by third parties
|
# All modifications and additions to the file contributed by third parties
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
%bcond_with asciidoctor
|
%bcond_with asciidoctor
|
||||||
%endif
|
%endif
|
||||||
Name: git
|
Name: git
|
||||||
Version: 2.50.0
|
Version: 2.51.0
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Fast, scalable, distributed revision control system
|
Summary: Fast, scalable, distributed revision control system
|
||||||
License: GPL-2.0-only
|
License: GPL-2.0-only
|
||||||
@@ -70,9 +70,6 @@ Patch8: git-asciidoc.patch
|
|||||||
Patch10: setup-don-t-fail-if-commondir-reference-is-deleted.patch
|
Patch10: setup-don-t-fail-if-commondir-reference-is-deleted.patch
|
||||||
# PATCH-FIX-OPENSUSE CVE-2024-24577.patch boo#1219660 antonio.teixeira@suse.com
|
# PATCH-FIX-OPENSUSE CVE-2024-24577.patch boo#1219660 antonio.teixeira@suse.com
|
||||||
Patch11: CVE-2024-24577.patch
|
Patch11: CVE-2024-24577.patch
|
||||||
# Add SHA256 support for gitk and git-gui (bsc#1239989)
|
|
||||||
Patch20: 0001-gitk-Add-support-of-SHA256-repo.patch
|
|
||||||
Patch21: 0002-git-gui-Add-support-of-SHA256-repo.patch
|
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: gpg2
|
BuildRequires: gpg2
|
||||||
BuildRequires: libcurl-devel
|
BuildRequires: libcurl-devel
|
||||||
@@ -89,7 +86,7 @@ BuildRequires: systemd-rpm-macros
|
|||||||
BuildRequires: tcsh
|
BuildRequires: tcsh
|
||||||
BuildRequires: update-desktop-files
|
BuildRequires: update-desktop-files
|
||||||
BuildRequires: xz
|
BuildRequires: xz
|
||||||
%if 0%{?suse_version} >= 1600
|
%if 0%{?suse_version} > 1600
|
||||||
BuildRequires: pkgconfig(zlib-ng)
|
BuildRequires: pkgconfig(zlib-ng)
|
||||||
%else
|
%else
|
||||||
BuildRequires: pkgconfig(zlib)
|
BuildRequires: pkgconfig(zlib)
|
||||||
@@ -414,8 +411,6 @@ install -m 644 %{SOURCE12} %{buildroot}/%{_sysconfdir}/bash_completion.d/git-pro
|
|||||||
%if %{with git_libsecret}
|
%if %{with git_libsecret}
|
||||||
install -m 755 -D contrib/credential/libsecret/git-credential-libsecret %{buildroot}/%{gitexecdir}/git-credential-libsecret
|
install -m 755 -D contrib/credential/libsecret/git-credential-libsecret %{buildroot}/%{gitexecdir}/git-credential-libsecret
|
||||||
%endif
|
%endif
|
||||||
# contrib/workdir
|
|
||||||
install -m 755 -D contrib/workdir/git-new-workdir %{buildroot}/%{_bindir}
|
|
||||||
# process tcsh completion
|
# process tcsh completion
|
||||||
(cd contrib/completion
|
(cd contrib/completion
|
||||||
mkdir -p %{buildroot}%{_datadir}/tcsh
|
mkdir -p %{buildroot}%{_datadir}/tcsh
|
||||||
@@ -577,7 +572,6 @@ fi
|
|||||||
%dir %{gitexecdir}
|
%dir %{gitexecdir}
|
||||||
%dir %{gitexecdir}/mergetools
|
%dir %{gitexecdir}/mergetools
|
||||||
%{gitexecdir}/mergetools/guiffy
|
%{gitexecdir}/mergetools/guiffy
|
||||||
%{_bindir}/git-new-workdir
|
|
||||||
%{_datadir}/bash-completion/completions/*
|
%{_datadir}/bash-completion/completions/*
|
||||||
%{_sysconfdir}/bash_completion.d/git-prompt
|
%{_sysconfdir}/bash_completion.d/git-prompt
|
||||||
%{_datadir}/tcsh
|
%{_datadir}/tcsh
|
||||||
|
@@ -28,11 +28,11 @@ v3:
|
|||||||
setup.c | 16 +++++++++++-----
|
setup.c | 16 +++++++++++-----
|
||||||
1 file changed, 11 insertions(+), 5 deletions(-)
|
1 file changed, 11 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
Index: git-2.43.1/setup.c
|
Index: git/setup.c
|
||||||
===================================================================
|
===================================================================
|
||||||
--- git-2.43.1.orig/setup.c
|
--- git.orig/setup.c
|
||||||
+++ git-2.43.1/setup.c
|
+++ git/setup.c
|
||||||
@@ -316,12 +316,20 @@ int get_common_dir_noenv(struct strbuf *
|
@@ -327,12 +327,20 @@ int get_common_dir_noenv(struct strbuf *
|
||||||
{
|
{
|
||||||
struct strbuf data = STRBUF_INIT;
|
struct strbuf data = STRBUF_INIT;
|
||||||
struct strbuf path = STRBUF_INIT;
|
struct strbuf path = STRBUF_INIT;
|
||||||
@@ -56,7 +56,7 @@ Index: git-2.43.1/setup.c
|
|||||||
while (data.len && (data.buf[data.len - 1] == '\n' ||
|
while (data.len && (data.buf[data.len - 1] == '\n' ||
|
||||||
data.buf[data.len - 1] == '\r'))
|
data.buf[data.len - 1] == '\r'))
|
||||||
data.len--;
|
data.len--;
|
||||||
@@ -332,8 +340,6 @@ int get_common_dir_noenv(struct strbuf *
|
@@ -343,8 +351,6 @@ int get_common_dir_noenv(struct strbuf *
|
||||||
strbuf_addbuf(&path, &data);
|
strbuf_addbuf(&path, &data);
|
||||||
strbuf_add_real_path(sb, path.buf);
|
strbuf_add_real_path(sb, path.buf);
|
||||||
ret = 1;
|
ret = 1;
|
||||||
|
Reference in New Issue
Block a user