Skip to content

Commit 19aadfc

Browse files
committed
Make default collapse setting configurable
1 parent a887a20 commit 19aadfc

File tree

4 files changed

+58
-13
lines changed

4 files changed

+58
-13
lines changed

README.md

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ Set the indentation as you like, default is 4.
4949
git config --global status-tree.indent <indent>
5050
```
5151

52+
Set whether to collapse directories by default, default is false.
53+
```
54+
git config --global status-tree.collapse <true|false>
55+
```
56+
5257
## Try it
5358
```
5459
gem install git-status-tree
@@ -63,6 +68,7 @@ echo "add staged" > test/staged.txt
6368
git add test/staged.txt
6469
git mv lib/version.rb lib/git_tree_version.rb
6570
git mv test/node/test_node_class.rb test/node_class_test.rb
71+
6672
git tree
6773
.
6874
├── lib
@@ -75,19 +81,15 @@ git tree
7581
├── DELETEME.txt (D+)
7682
└── README.md (M)
7783
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
8385
.
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)
9193
9294
# reset repo
9395
git reset HEAD --hard

bin/git_add_alias_tree

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ BIN_DIR=`pwd`
55
popd > /dev/null
66

77
git config --global status-tree.indent 4
8+
git config --global status-tree.collapse false
89
git config --global alias.tree "!exec $BIN_DIR/git-status-tree"
910
echo '#############################'
1011
echo '# "git tree" has been added #'

src/git_status_tree.rb

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class GitStatusTree
1212

1313
def initialize(options = {})
1414
Node.indent = indent(options)
15-
Node.collapse_dirs = options[:collapse] || false
15+
Node.collapse_dirs = collapse(options)
1616
@files = `git status --porcelain`.split("\n")
1717
@nodes = files.map { |file| Node.create_from_string file }
1818
@tree = nodes.reduce { |a, i| (a + i).nodes[0] }
@@ -35,8 +35,20 @@ def indent(options)
3535
indent
3636
end
3737

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+
3845
def config
3946
config = `git config --global status-tree.indent`.strip
4047
config =~ /\A\d+\z/ ? config.to_i : nil
4148
end
49+
50+
def config_collapse?
51+
config = `git config --global status-tree.collapse`.strip
52+
config == 'true'
53+
end
4254
end

test/integration/test_git_status_tree_class.rb

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,36 @@ def test_indent_default_when_no_config
7474
assert_equal(4, Node.indent)
7575
end
7676

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+
77107
def test_multiple_files_and_directories
78108
Dir.mkdir('src')
79109
File.write('src/main.rb', 'puts "hello"')

0 commit comments

Comments
 (0)