File tree Expand file tree Collapse file tree 4 files changed +58
-13
lines changed Expand file tree Collapse file tree 4 files changed +58
-13
lines changed Original file line number Diff line number Diff line change @@ -49,6 +49,11 @@ Set the indentation as you like, default is 4.
49
49
git config --global status-tree.indent <indent>
50
50
```
51
51
52
+ Set whether to collapse directories by default, default is false.
53
+ ```
54
+ git config --global status-tree.collapse <true|false>
55
+ ```
56
+
52
57
## Try it
53
58
```
54
59
gem install git-status-tree
@@ -63,6 +68,7 @@ echo "add staged" > test/staged.txt
63
68
git add test/staged.txt
64
69
git mv lib/version.rb lib/git_tree_version.rb
65
70
git mv test/node/test_node_class.rb test/node_class_test.rb
71
+
66
72
git tree
67
73
.
68
74
├── lib
@@ -75,19 +81,15 @@ git tree
75
81
├── DELETEME.txt (D+)
76
82
└── README.md (M)
77
83
78
- # Example with --collapse option for deeply nested structures
79
- mkdir -p domains/foo/bar/module/api/src/main/java/com/company/service
80
- echo "Service.java" > domains/foo/bar/module/api/src/main/java/com/company/service/Service.java
81
- git add domains
82
- git tree --collapse
84
+ git tree -ci 2
83
85
.
84
- ├── domains/foo/bar/module/api/src/main/java/com/company/service/Service.java (A +)
85
- ├── lib/version.rb -> git_tree_version.rb (R+)
86
- ├── test/ node/test_node_class.rb -> test/node_class_test.rb (R+)
87
- ├── test/ staged.txt (A+)
88
- ├── test/ untracked.txt (?)
89
- ├── DELETEME.txt (D+)
90
- └── README.md (M)
86
+ ├ lib/version.rb -> git_tree_version.rb (R +)
87
+ ├ test
88
+ │ ├ node/test_node_class.rb -> test/node_class_test.rb (R+)
89
+ │ ├ staged.txt (A+)
90
+ │ └ untracked.txt (?)
91
+ ├ DELETEME.txt (D+)
92
+ └ README.md (M)
91
93
92
94
# reset repo
93
95
git reset HEAD --hard
Original file line number Diff line number Diff line change @@ -5,6 +5,7 @@ BIN_DIR=`pwd`
5
5
popd > /dev/null
6
6
7
7
git config --global status-tree.indent 4
8
+ git config --global status-tree.collapse false
8
9
git config --global alias.tree " !exec $BIN_DIR /git-status-tree"
9
10
echo ' #############################'
10
11
echo ' # "git tree" has been added #'
Original file line number Diff line number Diff line change @@ -12,7 +12,7 @@ class GitStatusTree
12
12
13
13
def initialize ( options = { } )
14
14
Node . indent = indent ( options )
15
- Node . collapse_dirs = options [ : collapse] || false
15
+ Node . collapse_dirs = collapse ( options )
16
16
@files = `git status --porcelain` . split ( "\n " )
17
17
@nodes = files . map { |file | Node . create_from_string file }
18
18
@tree = nodes . reduce { |a , i | ( a + i ) . nodes [ 0 ] }
@@ -35,8 +35,20 @@ def indent(options)
35
35
indent
36
36
end
37
37
38
+ def collapse ( options )
39
+ # Command line option takes precedence, then git config, then default (false)
40
+ return options [ :collapse ] if options . key? ( :collapse )
41
+
42
+ config_collapse?
43
+ end
44
+
38
45
def config
39
46
config = `git config --global status-tree.indent` . strip
40
47
config =~ /\A \d +\z / ? config . to_i : nil
41
48
end
49
+
50
+ def config_collapse?
51
+ config = `git config --global status-tree.collapse` . strip
52
+ config == 'true'
53
+ end
42
54
end
Original file line number Diff line number Diff line change @@ -74,6 +74,36 @@ def test_indent_default_when_no_config
74
74
assert_equal ( 4 , Node . indent )
75
75
end
76
76
77
+ def test_collapse_from_git_config_true
78
+ `git config --global status-tree.collapse true`
79
+ GitStatusTree . new
80
+ assert_equal ( true , Node . collapse_dirs )
81
+ ensure
82
+ `git config --global --unset status-tree.collapse 2>/dev/null`
83
+ end
84
+
85
+ def test_collapse_from_git_config_false
86
+ `git config --global status-tree.collapse false`
87
+ GitStatusTree . new
88
+ assert_equal ( false , Node . collapse_dirs )
89
+ ensure
90
+ `git config --global --unset status-tree.collapse 2>/dev/null`
91
+ end
92
+
93
+ def test_collapse_default_when_no_config
94
+ `git config --global --unset status-tree.collapse 2>/dev/null`
95
+ GitStatusTree . new
96
+ assert_equal ( false , Node . collapse_dirs )
97
+ end
98
+
99
+ def test_collapse_command_line_overrides_config
100
+ `git config --global status-tree.collapse false`
101
+ GitStatusTree . new ( collapse : true )
102
+ assert_equal ( true , Node . collapse_dirs )
103
+ ensure
104
+ `git config --global --unset status-tree.collapse 2>/dev/null`
105
+ end
106
+
77
107
def test_multiple_files_and_directories
78
108
Dir . mkdir ( 'src' )
79
109
File . write ( 'src/main.rb' , 'puts "hello"' )
You can’t perform that action at this time.
0 commit comments