milkode 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. data/VERSION +1 -1
  2. data/bin/gmilk +1 -1
  3. data/bin/milk +1 -1
  4. data/lib/milkode/cdstk/cdstk.rb +337 -117
  5. data/lib/milkode/cdstk/cli_cdstk.rb +27 -9
  6. data/lib/milkode/cdstk/cli_cdstksub.rb +44 -6
  7. data/lib/milkode/cdstk/milkode_yaml.rb +105 -0
  8. data/lib/milkode/cdstk/package.rb +83 -0
  9. data/lib/milkode/cdstk/yaml_file_wrapper.rb +94 -0
  10. data/lib/milkode/cdweb/app.rb +6 -28
  11. data/lib/milkode/cdweb/lib/database.rb +6 -0
  12. data/lib/milkode/cdweb/lib/grep.rb +28 -0
  13. data/lib/milkode/cdweb/lib/mkurl.rb +2 -0
  14. data/lib/milkode/cdweb/lib/search_contents.rb +49 -10
  15. data/lib/milkode/cdweb/views/filelist.haml +2 -6
  16. data/lib/milkode/cdweb/views/header_menu.haml +5 -0
  17. data/lib/milkode/cdweb/views/search.haml +4 -8
  18. data/lib/milkode/cdweb/views/search_form.haml +22 -0
  19. data/lib/milkode/cdweb/views/view.haml +2 -6
  20. data/lib/milkode/common/ignore_checker.rb +34 -0
  21. data/lib/milkode/common/ignore_setting.rb +62 -0
  22. data/lib/milkode/grep/cli_grep.rb +10 -9
  23. data/milkode.gemspec +18 -5
  24. data/test/data/.gitignore +42 -0
  25. data/test/data/no_auto_ignore/.gitignore +1 -0
  26. data/test/data/no_auto_ignore/a.txt +3 -0
  27. data/test/milkode_test_work.rb +2 -2
  28. data/test/test_cdstk.rb +17 -12
  29. data/test/test_database.rb +4 -4
  30. data/test/test_ignore_checker.rb +26 -0
  31. data/test/test_ignore_setting.rb +113 -0
  32. data/test/test_milkode_yaml.rb +149 -0
  33. data/test/test_package.rb +73 -0
  34. data/test/test_yaml_file_wrapper.rb +97 -0
  35. metadata +19 -6
  36. data/lib/milkode/cdstk/cdstk_yaml.rb +0 -140
  37. data/test/test_cdstk_yaml.rb +0 -167
@@ -0,0 +1,42 @@
1
+ # rcov generated
2
+ coverage
3
+
4
+ # rdoc generated
5
+ rdoc
6
+
7
+ # yard generated
8
+ doc
9
+ .yardoc
10
+
11
+ # bundler
12
+ .bundle
13
+
14
+ # jeweler generated
15
+ pkg
16
+
17
+ # Have editor/IDE/OS specific files you need to ignore? Consider using a global gitignore:
18
+ #
19
+ # * Create a file at ~/.gitignore
20
+ # * Include files you want ignored
21
+ # * Run: git config --global core.excludesfile ~/.gitignore
22
+ #
23
+ # After doing this, these files will be ignored in all your git projects,
24
+ # saving you from having to 'pollute' every project you touch with them
25
+ #
26
+ # Not sure what to needs to be ignored for particular editors/OSes? Here's some ideas to get you started. (Remember, remove the leading # of the line)
27
+ #
28
+ # For MacOS:
29
+ #
30
+ #.DS_Store
31
+ #
32
+ # For TextMate
33
+ #*.tmproj
34
+ #tmtags
35
+ #
36
+ # For emacs:
37
+ #*~
38
+ #\#*
39
+ #.\#*
40
+ #
41
+ # For vim:
42
+ #*.swp
@@ -0,0 +1 @@
1
+ *.bak
@@ -0,0 +1,3 @@
1
+ a
2
+ b
3
+ c
@@ -32,14 +32,14 @@ class MilkodeTestWork
32
32
  def init_db(name)
33
33
  dbdir = expand_path(name)
34
34
  FileUtils.mkdir_p dbdir
35
- Dir.chdir(dbdir) { cdstk.init }
35
+ Dir.chdir(dbdir) { cdstk.init({}) }
36
36
  end
37
37
 
38
38
  def add_package(name, package_path)
39
39
  dbdir = expand_path(name)
40
40
 
41
41
  Dir.chdir(dbdir) do
42
- cdstk.add [package_path]
42
+ cdstk.add [package_path], {}
43
43
  end
44
44
  end
45
45
 
@@ -30,25 +30,26 @@ class TestCdstk < Test::Unit::TestCase
30
30
  obj = Cdstk.new(io)
31
31
 
32
32
  io.puts('--- init ---')
33
- obj.init
33
+ obj.init({})
34
34
 
35
35
  io.puts('--- add ---')
36
- obj.add(['../../lib/milkode/findgrep', '../../lib/milkode/common'])
37
- obj.add(['../../lib/milkode/findgrep'])
38
- obj.add(['../data/abc.zip'])
39
- obj.add(['../data/nodir_abc.zip'])
40
- obj.add(['../data/nodir_abc_xpi.xpi'])
41
- obj.add(['http://ongaeshi.me/test_data/http_nodir_abc.zip'])
42
- assert_raise(OpenURI::HTTPError) { obj.add(['http://ongaeshi.me/test_data/not_found.zip']) }
36
+ obj.add(['../../lib/milkode/findgrep', '../../lib/milkode/common'], {})
37
+ obj.add(['../../lib/milkode/findgrep'], {})
38
+ obj.add(['../data/abc.zip'], {})
39
+ obj.add(['../data/nodir_abc.zip'], {})
40
+ obj.add(['../data/nodir_abc_xpi.xpi'], {})
41
+ obj.add(['http://ongaeshi.me/test_data/http_nodir_abc.zip'], {})
42
+ assert_raise(OpenURI::HTTPError) { obj.add(['http://ongaeshi.me/test_data/not_found.zip'], {}) }
43
+ obj.add(['../data/no_auto_ignore'], {:no_auto_ignore => true})
43
44
 
44
45
  FileUtils.touch('last1.txt')
45
- obj.add(['last1.txt'])
46
+ obj.add(['last1.txt'], {})
46
47
  FileUtils.touch('atodekesu.txt')
47
- obj.add(['atodekesu.txt'])
48
+ obj.add(['atodekesu.txt'], {})
48
49
  FileUtils.rm('atodekesu.txt')
49
50
 
50
51
  io.puts('--- add notfound ---')
51
- obj.add(['notfound.html'])
52
+ obj.add(['notfound.html'], {})
52
53
 
53
54
  io.puts('--- update_all ---')
54
55
  FileUtils.touch('packages/zip/abc/c.txt')
@@ -79,8 +80,12 @@ class TestCdstk < Test::Unit::TestCase
79
80
  # obj.cleanup({:force=>true})
80
81
 
81
82
  io.puts('--- rebuild ---')
82
- obj.rebuild
83
+ obj.rebuild([], {:all => true})
83
84
 
85
+ io.puts('--- ignore ---')
86
+ obj.ignore(['dir*', '*snip*'], {:package => "common"})
87
+ obj.ignore([], {:package => "common", :test => true})
88
+
84
89
  io.puts('--- remove ---')
85
90
  obj.remove(['findgrep', 'common'], {:force => true})
86
91
 
@@ -21,12 +21,12 @@ module Milkode
21
21
  # データベース作成
22
22
  io = StringIO.new
23
23
  @obj = Cdstk.new(io)
24
- @obj.init
25
- @obj.add(['../../test'])
26
- @obj.add(['../../lib'])
24
+ @obj.init({})
25
+ @obj.add(['../../test'], {})
26
+ @obj.add(['../../lib'], {})
27
27
 
28
28
  FileUtils.touch('notfound.file')
29
- @obj.add(['notfound.file'])
29
+ @obj.add(['notfound.file'], {})
30
30
  FileUtils.rm('notfound.file')
31
31
 
32
32
  # puts io.string
@@ -0,0 +1,26 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2012/03/02
7
+
8
+ require 'milkode/common/ignore_checker.rb'
9
+ require 'test_helper'
10
+
11
+ class TestIgnoreChecker < Test::Unit::TestCase
12
+ include Milkode
13
+
14
+ def test_basic
15
+ c = IgnoreChecker.new
16
+ c.add IgnoreSetting.new("/", ["/rdoc", "/test/data", "*.lock"])
17
+ c.add IgnoreSetting.new("/pkg", ["*.gem"])
18
+
19
+ assert_equal false, c.ignore?("/lib/test.rb")
20
+ assert_equal true, c.ignore?("/pkg/hoge.gem")
21
+ assert_equal false, c.ignore?("/pkg/hoge.txt")
22
+ assert_equal true, c.ignore?("/test.lock")
23
+ assert_equal true, c.ignore?("/rdoc")
24
+ assert_equal true, c.ignore?("/test/data")
25
+ end
26
+ end
@@ -0,0 +1,113 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2012/03/02
7
+
8
+ require 'milkode/common/ignore_setting.rb'
9
+ require 'milkode/common/util'
10
+ require 'test_helper'
11
+ require 'test/unit'
12
+
13
+ class TestIgnoreSetting < Test::Unit::TestCase
14
+ include Milkode
15
+
16
+ def test_regexp
17
+ r = /test(\/|\Z)/
18
+
19
+ assert_match r, "test"
20
+ assert_match r, "test/"
21
+ assert_no_match r, "testa"
22
+ assert_match r, "test/foo"
23
+ assert_no_match r, "testa/foo"
24
+ end
25
+
26
+ def test_glob_regexp
27
+ r = /[^\/]*bak(\/|\Z)/
28
+
29
+ assert_match r, "hoge.bak"
30
+ assert_no_match r, "hoge.cpp"
31
+ assert_match r, "a/hoge.bak/test"
32
+ assert_no_match r, "hoge.baka/test"
33
+ end
34
+
35
+ def test_reader
36
+ is = IgnoreSetting.new "/pkg", ["rdoc", "*.bak"]
37
+
38
+ assert_equal "/pkg", is.path
39
+ assert_equal ["rdoc", "*.bak"], is.ignores
40
+ end
41
+
42
+ def test_ignore?
43
+ is = IgnoreSetting.new "/doc", ["foo", "bar"]
44
+
45
+ assert_equal false, is.ignore?("/lib/hoge.rb")
46
+ assert_equal false, is.ignore?("/doc")
47
+
48
+ assert_equal true, is.ignore?("/doc/foo")
49
+ assert_equal false, is.ignore?("/doc/foo_a")
50
+ assert_equal true, is.ignore?("/doc/foo/a.txt")
51
+ assert_equal true, is.ignore?("/doc/bar")
52
+ assert_equal false, is.ignore?("/doc/hoge.foo")
53
+ end
54
+
55
+ def test_slash_ignore?
56
+ is = IgnoreSetting.new "/doc", ["/foo"]
57
+
58
+ assert_equal true, is.ignore?("/doc/foo")
59
+ assert_equal false, is.ignore?("/doc/bar/foo")
60
+ end
61
+
62
+ def test_glob_ignore?
63
+ is = IgnoreSetting.new "/doc", ["*.bak"]
64
+
65
+ assert_equal false, is.ignore?("/hoge.bak")
66
+ assert_equal true, is.ignore?("/doc/hoge.bak")
67
+ assert_equal true, is.ignore?("/doc/test/a.bak")
68
+ assert_equal false, is.ignore?("/doc/hoge.baka")
69
+ assert_equal false, is.ignore?("/doc/hoge@bak")
70
+ end
71
+
72
+ def test_slash_glob_ignore?
73
+ is = IgnoreSetting.new "/doc", ["/*.bak"]
74
+
75
+ assert_equal true, is.ignore?("/doc/hoge.bak")
76
+ assert_equal false, is.ignore?("/doc/test/a.bak")
77
+ end
78
+
79
+ def test_multipath_ignore?
80
+ is = IgnoreSetting.new "/doc", ["test/data"]
81
+
82
+ assert_equal true, is.ignore?("/doc/test/data/a.txt")
83
+ assert_equal false, is.ignore?("/doc/test/dataa/a.txt")
84
+ end
85
+
86
+ def test_parse_gitignore
87
+ ignores = IgnoreSetting.parse_gitignore <<EOF
88
+ # comment
89
+ rdoc
90
+ # comment2
91
+ *~
92
+ /test/data
93
+ EOF
94
+ assert_equal ignores, ["rdoc", "*~", "/test/data"]
95
+ end
96
+
97
+ def test_create_from_gitignore
98
+ Dir.chdir(File.join(File.dirname(__FILE__))) do
99
+ open("data/.gitignore") do |f|
100
+ is = IgnoreSetting.create_from_gitignore("/doc", f.read)
101
+ assert_equal "/doc", is.path
102
+ assert_equal ["coverage", "rdoc", "doc", ".yardoc", ".bundle", "pkg"], is.ignores
103
+ end
104
+ end
105
+ end
106
+
107
+ def test_last_slash
108
+ is = IgnoreSetting.new "/doc", ["/lib/"]
109
+
110
+ assert_equal true, is.ignore?("/doc/lib")
111
+ assert_equal true, is.ignore?("/doc/lib/test")
112
+ end
113
+ end
@@ -0,0 +1,149 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/02/20
7
+
8
+ require 'test_helper'
9
+ require 'milkode/cdstk/milkode_yaml.rb'
10
+ require 'milkode/common/util'
11
+
12
+ class TestMilkodeYaml < Test::Unit::TestCase
13
+ include Milkode
14
+
15
+ SRC = <<EOF
16
+ ---
17
+ version: '0.2'
18
+ contents:
19
+ - directory: /a/dir1
20
+ - directory: /path/to/dir
21
+ ignore:
22
+ - ! '*.bak'
23
+ - /rdoc
24
+ - directory: /a/b/c
25
+ EOF
26
+
27
+ V_0_1 = <<EOF
28
+ ---
29
+ version: 0.1
30
+ contents:
31
+ - directory: /a/dir1
32
+ - directory: /path/to/dir
33
+ EOF
34
+
35
+ # YAML#dumpの出力形式が1.8と1.9で変わってしまったので、1.8の時はテストしない
36
+
37
+ def test_dump
38
+ obj = MilkodeYaml.new(SRC)
39
+ assert_equal SRC, obj.dump if Milkode::Util::ruby19?
40
+ end
41
+
42
+ def test_version
43
+ obj = MilkodeYaml.new(SRC)
44
+ assert_equal '0.2', obj.version
45
+ end
46
+
47
+ def test_contents
48
+ obj = MilkodeYaml.new
49
+ assert_equal [], obj.contents
50
+
51
+ obj = MilkodeYaml.new(SRC)
52
+ assert_equal 3, obj.contents.size
53
+ assert_equal "/path/to/dir", obj.contents[1].directory
54
+ assert_equal 2, obj.contents[1].ignore.size
55
+ assert_equal "/rdoc", obj.contents[1].ignore[1]
56
+ end
57
+
58
+ def test_add
59
+ obj = MilkodeYaml.new
60
+ obj.add(Package.create("/path/to/dir", []))
61
+
62
+ assert_equal 1, obj.contents.size
63
+
64
+ assert_equal <<EOF, obj.dump if Milkode::Util::ruby19?
65
+ ---
66
+ version: '0.2'
67
+ contents:
68
+ - directory: /path/to/dir
69
+ EOF
70
+ end
71
+
72
+ def test_remove
73
+ obj = MilkodeYaml.new(SRC)
74
+ obj.remove(obj.find_name("c"))
75
+
76
+ assert_equal 2, obj.contents.size
77
+
78
+ assert_equal <<EOF, obj.dump if Milkode::Util::ruby19?
79
+ ---
80
+ version: '0.2'
81
+ contents:
82
+ - directory: /a/dir1
83
+ - directory: /path/to/dir
84
+ ignore:
85
+ - ! '*.bak'
86
+ - /rdoc
87
+ EOF
88
+ end
89
+
90
+ def test_migrate
91
+ obj = MilkodeYaml.new(SRC)
92
+ assert_equal false, obj.migrate
93
+
94
+ obj = MilkodeYaml.new(V_0_1)
95
+ assert_equal true, obj.migrate
96
+
97
+ assert_equal <<EOF, obj.dump if Milkode::Util::ruby19?
98
+ ---
99
+ version: '0.2'
100
+ contents:
101
+ - directory: /a/dir1
102
+ - directory: /path/to/dir
103
+ EOF
104
+
105
+ end
106
+
107
+ def test_find_name
108
+ obj = MilkodeYaml.new(SRC)
109
+ assert_not_nil obj.find_name('dir')
110
+ assert_nil obj.find_name('not')
111
+ end
112
+
113
+ def test_update
114
+ obj = MilkodeYaml.new(SRC)
115
+
116
+ p = obj.find_name('dir')
117
+ p = Package.create(p.directory, p.ignore + ['*.a'])
118
+ obj.update(p)
119
+
120
+ assert_equal <<EOF, obj.dump if Milkode::Util::ruby19?
121
+ ---
122
+ version: '0.2'
123
+ contents:
124
+ - directory: /a/dir1
125
+ - directory: /path/to/dir
126
+ ignore:
127
+ - ! '*.bak'
128
+ - /rdoc
129
+ - ! '*.a'
130
+ - directory: /a/b/c
131
+ EOF
132
+
133
+ p = Package.create("not_found")
134
+ assert_raise(RuntimeError) { obj.update(p) }
135
+ end
136
+
137
+ def test_find_dir
138
+ obj = MilkodeYaml.new(SRC)
139
+ assert_not_nil obj.find_dir('/path/to/dir')
140
+ end
141
+
142
+ def test_package_root
143
+ obj = MilkodeYaml.new(SRC)
144
+ assert_equal nil , obj.package_root('/not_dir')
145
+ assert_equal "/a/dir1" , obj.package_root('/a/dir1/dir3').directory
146
+ assert_equal nil , obj.package_root('/hoge/a/dir1/dir3')
147
+ assert_equal '/path/to/dir', obj.package_root('/path/to/dir').directory
148
+ end
149
+ end
@@ -0,0 +1,73 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # @file
4
+ # @brief
5
+ # @author ongaeshi
6
+ # @date 2011/02/20
7
+
8
+ require 'test_helper'
9
+ require 'milkode/cdstk/package.rb'
10
+
11
+ class TestPackage < Test::Unit::TestCase
12
+ include Milkode
13
+
14
+ def test_same_name?
15
+ p1 = Package.create('/path/to/dir')
16
+ p2 = Package.create('/path/to/dir')
17
+ p3 = Package.create('/path/to/d2')
18
+ p4 = Package.create('/path/to/dir', ["*.bak"])
19
+
20
+ assert p1.same_name? p2.name
21
+ assert !p1.same_name?(p3.name)
22
+ assert p1.same_name? p4.name
23
+ end
24
+
25
+ def test_eql
26
+ p1 = Package.create('/path/to/dir')
27
+ p2 = Package.create('/path/to/dir')
28
+ p3 = Package.create('/path/to/d2')
29
+ p4 = Package.create('/path/to/dir', ["*.bak"])
30
+
31
+ assert p1 == p2
32
+ assert p1 != p3
33
+ assert p1 != p4
34
+ end
35
+
36
+ def test_options
37
+ p1 = Package.create('/path/to/dir')
38
+ assert_equal({}, p1.options)
39
+ end
40
+
41
+ def test_set_options
42
+ p = Package.create('/path/to/dir')
43
+
44
+ options = p.options
45
+ options[:no_auto_ignore] = true
46
+ p.set_options options
47
+
48
+ assert_equal({:no_auto_ignore => true}, p.options)
49
+ # p p.hash
50
+ end
51
+
52
+ def test_set_ignore
53
+ p = Package.create('/path/to/dir')
54
+
55
+ ignore = p.ignore
56
+ ignore << "rdoc"
57
+ ignore << "*.bak"
58
+ p.set_ignore ignore
59
+
60
+ assert_equal(["rdoc", "*.bak"], p.ignore)
61
+ # p p.hash
62
+ end
63
+
64
+ def test_name
65
+ p = Package.create('/path/to/dir')
66
+
67
+ options = p.options
68
+ options[:name] = 'foo'
69
+ p.set_options options
70
+
71
+ assert_equal('foo', p.name)
72
+ end
73
+ end