forked from pool/git
- Refresh gitk SHA256 patch and add SHA256 support to git-gui (bsc#1239989): 0001-gitk-Add-support-of-SHA256-repo.patch 0002-git-gui-Add-support-of-SHA256-repo.patch The previous patches are dropped: 0001-gitk-Add-a-basic-support-of-SHA256-repositories-into.patch 0002-gitk-Add-auto-select-length-preference-for-SHA256.patch OBS-URL: https://build.opensuse.org/request/show/1286266 OBS-URL: https://build.opensuse.org/package/show/devel:tools:scm/git?expand=0&rev=672
179 lines
5.4 KiB
Diff
179 lines
5.4 KiB
Diff
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
|
|
|