[PATCH 1/2] git-gui: Assume untracked directories are Git submodules

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



If `git ls-files --others` returned us the name of a directory then
it is because Git has decided that this directory itself contains a
valid Git repository and its files shouldn't be listed as untracked
for this repository.

In such a case we should label the object as a Git repository and
not just as a directory.

Signed-off-by: Shawn O. Pearce <spearce@xxxxxxxxxxx>
---

 This and the patch following it are on top of Michele's recent
 series and will be in maint shortly.

 lib/diff.tcl |   21 ++++++++++++++++++---
 1 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/lib/diff.tcl b/lib/diff.tcl
index a1d5e52..694834a 100644
--- a/lib/diff.tcl
+++ b/lib/diff.tcl
@@ -84,17 +84,30 @@ proc show_diff {path w {lno {}}} {
 	#
 	if {$m eq {_O}} {
 		set max_sz [expr {128 * 1024}]
+		set type unknown
 		if {[catch {
-				if {[file type $path] == {link}} {
+				set type [file type $path]
+				switch -- $type {
+				directory {
+					set type submodule
+					set content {}
+					set sz 0
+				}
+				link {
 					set content [file readlink $path]
 					set sz [string length $content]
-				} else {
+				}
+				file {
 					set fd [open $path r]
 					fconfigure $fd -eofchar {}
 					set content [read $fd $max_sz]
 					close $fd
 					set sz [file size $path]
 				}
+				default {
+					error "'$type' not supported"
+				}
+				}
 			} err ]} {
 			set diff_active 0
 			unlock_index
@@ -103,7 +116,9 @@ proc show_diff {path w {lno {}}} {
 			return
 		}
 		$ui_diff conf -state normal
-		if {![catch {set type [exec file $path]}]} {
+		if {$type eq {submodule}} {
+			$ui_diff insert end "* Git Repository (subproject)\n" d_@
+		} elseif {![catch {set type [exec file $path]}]} {
 			set n [string length $path]
 			if {[string equal -length $n $path $type]} {
 				set type [string range $type $n end]
-- 
1.5.3.1.880.g5a3ab

-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux