git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[GIT-GUI PATCH] Teach git gui about file type changes

From
Gustaf Hendeby <hendeby@isy.liu.se>
Date
Aug 22, 2008, 20:10 UTC
Message-ID
<1219435827-11122-1-git-send-email-hendeby@isy.liu.se>
Signed-off-by: Gustaf Hendeby <hendeby@isy.liu.se>
---
Hi!

First of all, I'm really new to tcl/tk and the git gui code base so I would appreciate any and all pointers here to make the changes acceptable.

Secondly, I could really not come up with an icon to represent a type change of a file. Right now it is just different from all the others and not illustrative at all...

/Gustaf
 git-gui.sh     |   18 +++++++++++++++++-
 lib/commit.tcl |    2 ++
 lib/index.tcl  |    7 +++++++
 3 files changed, 26 insertions(+), 1 deletions(-)
diff --git a/git-gui.sh b/git-gui.sh
index ad65aaa..8ad6567 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -1619,6 +1619,15 @@ static unsigned char file_merge_bits[] = {
    0xfa, 0x17, 0x02, 0x10, 0xfe, 0x1f};
 } -maskdata $filemask
 
+image create bitmap file_statechange -background white -foreground green -data {
+#define file_merge_width 14
+#define file_merge_height 15
+static unsigned char file_statechange_bits[] = {
+   0xfe, 0x01, 0x02, 0x03, 0x02, 0x05, 0x02, 0x09, 0x02, 0x1f, 0x62, 0x10,
+   0x62, 0x10, 0xba, 0x11, 0xba, 0x11, 0x62, 0x10, 0x62, 0x10, 0x02, 0x10,
+   0x02, 0x10, 0x02, 0x10, 0xfe, 0x1f};
+} -maskdata $filemask
+
 set ui_index .vpane.files.index.list
 set ui_workdir .vpane.files.workdir.list
 
@@ -1627,12 +1636,14 @@ set all_icons(A$ui_index)   file_fulltick
 set all_icons(M$ui_index)   file_fulltick
 set all_icons(D$ui_index)   file_removed
 set all_icons(U$ui_index)   file_merge
+set all_icons(T$ui_index)   file_statechange
 
 set all_icons(_$ui_workdir) file_plain
 set all_icons(M$ui_workdir) file_mod
 set all_icons(D$ui_workdir) file_question
 set all_icons(U$ui_workdir) file_merge
 set all_icons(O$ui_workdir) file_plain
+set all_icons(T$ui_workdir) file_statechange
 
 set max_status_desc 0
 foreach i {
@@ -1643,6 +1654,9 @@ foreach i {
 		{MM {mc "Portions staged for commit"}}
 		{MD {mc "Staged for commit, missing"}}
 
+		{_T {mc "File type changed, not staged"}}
+		{T_ {mc "File type changed, staged"}}
+
 		{_O {mc "Untracked, not staged"}}
 		{A_ {mc "Staged for commit"}}
 		{AM {mc "Portions staged for commit"}}
@@ -2757,7 +2771,9 @@ proc popup_diff_menu {ctxm x y X Y} {
 	if {$::is_3way_diff
 		|| $current_diff_path eq {}
 		|| ![info exists file_states($current_diff_path)]
-		|| {_O} eq [lindex $file_states($current_diff_path) 0]} {
+		|| {_O} eq [lindex $file_states($current_diff_path) 0]
+		|| {_T} eq [lindex $file_states($current_diff_path) 0]
+		|| {T_} eq [lindex $file_states($current_diff_path) 0]} {
 		set s disabled
 	} else {
 		set s normal
diff --git a/lib/commit.tcl b/lib/commit.tcl
index 40a7103..f4ab707 100644
--- a/lib/commit.tcl
+++ b/lib/commit.tcl
@@ -149,6 +149,7 @@ The rescan will be automatically started now.
 		_? {continue}
 		A? -
 		D? -
+		T_ -
 		M? {set files_ready 1}
 		U? {
 			error_popup [mc "Unmerged files cannot be committed.
@@ -428,6 +429,7 @@ A rescan will be automatically started now.
 		__ -
 		A_ -
 		M_ -
+		T_ -
 		D_ {
 			unset file_states($path)
 			catch {unset selected_paths($path)}
diff --git a/lib/index.tcl b/lib/index.tcl
index 3c1fce7..0a98715 100644
--- a/lib/index.tcl
+++ b/lib/index.tcl
@@ -99,6 +99,7 @@ proc write_update_indexinfo {fd pathList totalCnt batch after} {
 		switch -glob -- [lindex $s 0] {
 		A? {set new _O}
 		M? {set new _M}
+		T_ {set new _T}
 		D_ {set new _D}
 		D? {set new _?}
 		?? {continue}
@@ -162,6 +163,7 @@ proc write_update_index {fd pathList totalCnt batch after} {
 		?D {set new D_}
 		_O -
 		AM {set new A_}
+		_T {set new T_}
 		U? {
 			if {[file exists $path]} {
 				set new M_
@@ -231,6 +233,7 @@ proc write_checkout_index {fd pathList totalCnt batch after} {
 		switch -glob -- [lindex $file_states($path) 0] {
 		U? {continue}
 		?M -
+		_T -
 		?D {
 			puts -nonewline $fd "[encoding convertto $path]\0"
 			display_file $path ?_
@@ -252,6 +255,7 @@ proc unstage_helper {txt paths} {
 		switch -glob -- [lindex $file_states($path) 0] {
 		A? -
 		M? -
+		T_ -
 		D? {
 			lappend pathList $path
 			if {$path eq $current_diff_path} {
@@ -296,6 +300,7 @@ proc add_helper {txt paths} {
 		_O -
 		?M -
 		?D -
+		_T -
 		U? {
 			lappend pathList $path
 			if {$path eq $current_diff_path} {
@@ -336,6 +341,7 @@ proc do_add_all {} {
 		switch -glob -- [lindex $file_states($path) 0] {
 		U? {continue}
 		?M -
+		_T -
 		?D {lappend paths $path}
 		}
 	}
@@ -353,6 +359,7 @@ proc revert_helper {txt paths} {
 		switch -glob -- [lindex $file_states($path) 0] {
 		U? {continue}
 		?M -
+		_T -
 		?D {
 			lappend pathList $path
 			if {$path eq $current_diff_path} {
-- 
1.6.0.150.gf1ade9
Next: Shawn O. Pearce
Message 1 of 2 in “Teach git gui about file type changes”
  1. Teach git gui about file type changesGustaf Hendeby, Aug 22, 2008
  2. Shawn O. PearceAug 25, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.