gonzui 1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (116) hide show
  1. data/AUTHORS.txt +9 -0
  2. data/History.txt +5539 -0
  3. data/Manifest.txt +115 -0
  4. data/PostInstall.txt +17 -0
  5. data/README.rdoc +149 -0
  6. data/Rakefile +28 -0
  7. data/bin/gonzui-db +167 -0
  8. data/bin/gonzui-import +177 -0
  9. data/bin/gonzui-remove +58 -0
  10. data/bin/gonzui-search +68 -0
  11. data/bin/gonzui-server +176 -0
  12. data/bin/gonzui-update +53 -0
  13. data/data/gonzui/catalog/catalog.ja +80 -0
  14. data/data/gonzui/doc/favicon.ico +0 -0
  15. data/data/gonzui/doc/folder.png +0 -0
  16. data/data/gonzui/doc/gonzui.css +279 -0
  17. data/data/gonzui/doc/gonzui.js +111 -0
  18. data/data/gonzui/doc/text.png +0 -0
  19. data/data/gonzuirc.sample +29 -0
  20. data/ext/autopack/autopack.c +88 -0
  21. data/ext/autopack/extconf.rb +3 -0
  22. data/ext/delta/delta.c +147 -0
  23. data/ext/delta/extconf.rb +5 -0
  24. data/ext/texttokenizer/extconf.rb +5 -0
  25. data/ext/texttokenizer/texttokenizer.c +93 -0
  26. data/ext/xmlformatter/extconf.rb +5 -0
  27. data/ext/xmlformatter/xmlformatter.c +207 -0
  28. data/lib/gonzui.rb +59 -0
  29. data/lib/gonzui/apt.rb +193 -0
  30. data/lib/gonzui/bdbdbm.rb +118 -0
  31. data/lib/gonzui/cmdapp.rb +14 -0
  32. data/lib/gonzui/cmdapp/app.rb +175 -0
  33. data/lib/gonzui/cmdapp/search.rb +134 -0
  34. data/lib/gonzui/config.rb +117 -0
  35. data/lib/gonzui/content.rb +19 -0
  36. data/lib/gonzui/dbm.rb +673 -0
  37. data/lib/gonzui/deindexer.rb +162 -0
  38. data/lib/gonzui/delta.rb +49 -0
  39. data/lib/gonzui/extractor.rb +347 -0
  40. data/lib/gonzui/fetcher.rb +309 -0
  41. data/lib/gonzui/gettext.rb +144 -0
  42. data/lib/gonzui/importer.rb +84 -0
  43. data/lib/gonzui/indexer.rb +316 -0
  44. data/lib/gonzui/info.rb +80 -0
  45. data/lib/gonzui/license.rb +100 -0
  46. data/lib/gonzui/logger.rb +48 -0
  47. data/lib/gonzui/monitor.rb +177 -0
  48. data/lib/gonzui/progressbar.rb +235 -0
  49. data/lib/gonzui/remover.rb +38 -0
  50. data/lib/gonzui/searcher.rb +330 -0
  51. data/lib/gonzui/searchquery.rb +235 -0
  52. data/lib/gonzui/searchresult.rb +111 -0
  53. data/lib/gonzui/updater.rb +254 -0
  54. data/lib/gonzui/util.rb +415 -0
  55. data/lib/gonzui/vcs.rb +128 -0
  56. data/lib/gonzui/webapp.rb +25 -0
  57. data/lib/gonzui/webapp/advsearch.rb +123 -0
  58. data/lib/gonzui/webapp/filehandler.rb +24 -0
  59. data/lib/gonzui/webapp/jsfeed.rb +61 -0
  60. data/lib/gonzui/webapp/markup.rb +445 -0
  61. data/lib/gonzui/webapp/search.rb +269 -0
  62. data/lib/gonzui/webapp/servlet.rb +319 -0
  63. data/lib/gonzui/webapp/snippet.rb +155 -0
  64. data/lib/gonzui/webapp/source.rb +37 -0
  65. data/lib/gonzui/webapp/stat.rb +137 -0
  66. data/lib/gonzui/webapp/top.rb +63 -0
  67. data/lib/gonzui/webapp/uri.rb +140 -0
  68. data/lib/gonzui/webapp/webrick.rb +48 -0
  69. data/script/console +10 -0
  70. data/script/destroy +14 -0
  71. data/script/generate +14 -0
  72. data/script/makemanifest.rb +21 -0
  73. data/tasks/extconf.rake +13 -0
  74. data/tasks/extconf/autopack.rake +43 -0
  75. data/tasks/extconf/delta.rake +43 -0
  76. data/tasks/extconf/texttokenizer.rake +43 -0
  77. data/tasks/extconf/xmlformatter.rake +43 -0
  78. data/test/_external_tools.rb +13 -0
  79. data/test/_test-util.rb +142 -0
  80. data/test/foo/Makefile.foo +66 -0
  81. data/test/foo/bar.c +5 -0
  82. data/test/foo/bar.h +6 -0
  83. data/test/foo/foo.c +25 -0
  84. data/test/foo/foo.spec +33 -0
  85. data/test/test_apt.rb +42 -0
  86. data/test/test_autopack_extn.rb +7 -0
  87. data/test/test_bdbdbm.rb +79 -0
  88. data/test/test_cmdapp-app.rb +35 -0
  89. data/test/test_cmdapp-search.rb +99 -0
  90. data/test/test_config.rb +28 -0
  91. data/test/test_content.rb +15 -0
  92. data/test/test_dbm.rb +171 -0
  93. data/test/test_deindexer.rb +50 -0
  94. data/test/test_delta.rb +66 -0
  95. data/test/test_extractor.rb +78 -0
  96. data/test/test_fetcher.rb +75 -0
  97. data/test/test_gettext.rb +50 -0
  98. data/test/test_gonzui.rb +11 -0
  99. data/test/test_helper.rb +10 -0
  100. data/test/test_importer.rb +56 -0
  101. data/test/test_indexer.rb +37 -0
  102. data/test/test_info.rb +82 -0
  103. data/test/test_license.rb +49 -0
  104. data/test/test_logger.rb +60 -0
  105. data/test/test_monitor.rb +23 -0
  106. data/test/test_searcher.rb +37 -0
  107. data/test/test_searchquery.rb +27 -0
  108. data/test/test_searchresult.rb +43 -0
  109. data/test/test_texttokenizer.rb +47 -0
  110. data/test/test_updater.rb +95 -0
  111. data/test/test_util.rb +149 -0
  112. data/test/test_vcs.rb +61 -0
  113. data/test/test_webapp-markup.rb +42 -0
  114. data/test/test_webapp-util.rb +19 -0
  115. data/test/test_webapp-xmlformatter.rb +19 -0
  116. metadata +291 -0
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestGonzui < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_truth
9
+ assert true # TODO
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ begin
3
+ require 'redgreen'
4
+ rescue LoadError
5
+ end
6
+ $LOAD_PATH << File.dirname(__FILE__) # require "test"
7
+ require 'stringio'
8
+ #require 'rbconfig.rb' # omajinai
9
+ require 'test/unit'
10
+ require File.dirname(__FILE__) + '/../lib/gonzui'
@@ -0,0 +1,56 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_external_tools.rb'
4
+ require '_test-util'
5
+
6
+ class ImporterTest < Test::Unit::TestCase
7
+ include TestUtil
8
+
9
+ include FileUtils
10
+
11
+ def _test_import(url)
12
+ config = Gonzui::Config.new
13
+ remove_db(config)
14
+ make_archives
15
+
16
+ importer = Gonzui::Importer.new(config)
17
+ importer.import(url)
18
+ begin
19
+ importer.import(url)
20
+ assert(false)
21
+ rescue Gonzui::ImporterError => e
22
+ assert(true)
23
+ end
24
+ summary = importer.summary
25
+ assert(summary.is_a?(String))
26
+ assert(/\d+/.match(summary))
27
+ importer.finish
28
+ remove_db(config)
29
+ end
30
+
31
+ def test_import_archive
32
+ _test_import(URI.from_path(FOO_TGZ))
33
+ end
34
+
35
+ def test_import_by_apt
36
+ _test_import(URI.for_apt("portmap"))
37
+ end
38
+
39
+ def test_import_unreadable_file
40
+ tmp_directory = "tmp.unreadable.#{Process.pid}"
41
+ mkdir_p(tmp_directory)
42
+
43
+ unreadable = File.join(tmp_directory, "unreadable.txt")
44
+ File.open(unreadable, "w") {|f| f.puts("unreadable") }
45
+ readable = File.join(tmp_directory, "readable.txt")
46
+ File.open(readable, "w") {|f| f.puts("readable") }
47
+
48
+ File.chmod(0000, unreadable)
49
+ begin
50
+ _test_import(URI.from_path(tmp_directory))
51
+ ensure
52
+ File.chmod(0600, unreadable)
53
+ rm_rf(tmp_directory)
54
+ end
55
+ end
56
+ end if (APT_ && ARC_)
@@ -0,0 +1,37 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_test-util'
4
+
5
+ class IndexerTest < Test::Unit::TestCase
6
+ include TestUtil
7
+
8
+ def setup
9
+ @dbm = nil
10
+ @config = Gonzui::Config.new
11
+ end
12
+ def teardown
13
+ unless @dbm.nil?
14
+ @dbm.close rescue nil
15
+ end
16
+ @dbm = nil
17
+ remove_db(@config)
18
+ end
19
+
20
+ def test_index
21
+ remove_db(@config)
22
+ dbm = Gonzui::DBM.open(@config)
23
+ @dbm = dbm
24
+ path = File.join(File.dirname(__FILE__), "foo", "foo.c")
25
+ url = URI.from_path(File.expand_path(path))
26
+ content = Gonzui::Content.new(File.read(path), File.mtime(path))
27
+ source_url = URI.parse("file:///foo")
28
+ indexer = Gonzui::Indexer.new(@config, dbm, source_url, path, content)
29
+ indexer.index
30
+ dbm.flush_cache
31
+ assert_equal(1, dbm.get_ncontents)
32
+ assert(dbm.has_package?("foo"))
33
+ # assert(dbm.has_package?(File.basename(File.dirname(__FILE__))))
34
+ assert(dbm.has_word?("main"))
35
+ assert(dbm.consistent?)
36
+ end
37
+ end
@@ -0,0 +1,82 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_test-util'
4
+
5
+ class InfoTest < Test::Unit::TestCase
6
+ TYPE_TABLE = [:fundef, :funcall, :fundecl]
7
+
8
+ def test_word_info
9
+ word_id = 0
10
+ word = "foo"
11
+ path_id = 100
12
+ seqno = 0
13
+ byteno = 300
14
+ lineno = 200
15
+ TYPE_TABLE.each_with_index {|type, type_id|
16
+ values = [word_id, path_id, seqno, byteno, type_id, type, lineno]
17
+ info = Gonzui::WordInfo.new(*values)
18
+ assert_equal(word_id, info.word_id)
19
+ assert_equal(path_id, info.path_id)
20
+ assert_equal(lineno, info.lineno)
21
+ assert_equal(byteno, info.byteno)
22
+ assert_equal(type_id, info.type_id)
23
+ assert_equal(type, info.type)
24
+
25
+ assert_equal(values, info.values)
26
+ }
27
+ end
28
+
29
+ def test_digest_info
30
+ byteno = 100
31
+ length = 5
32
+ TYPE_TABLE.each_with_index {|type, type_id|
33
+ values = [byteno, length, type_id, type]
34
+ info = Gonzui::DigestInfo.new(*values)
35
+ assert_equal(byteno, info.byteno)
36
+ assert_equal(length, length)
37
+ assert_equal(type_id, info.type_id)
38
+ assert_equal(values, info.values)
39
+ }
40
+ end
41
+
42
+ def test_occurrence
43
+ o = Gonzui::Occurrence.new(10, 1, 5)
44
+ assert_equal((10...15), o.range)
45
+ assert_equal(15, o.end_byteno)
46
+ end
47
+
48
+ def test_content_info
49
+ i = {
50
+ :size => 123,
51
+ :mtime => Time.at(0),
52
+ :itime => Time.now,
53
+ :format_id => 0,
54
+ :license_id => 1,
55
+ :nlines => 10,
56
+ :indexed_p => true,
57
+ }
58
+ Gonzui::ContentInfo.members.each {|name|
59
+ name = name.intern
60
+ i.include?(name)
61
+ }
62
+ info = Gonzui::ContentInfo.new(i[:size], i[:mtime], i[:itime], i[:format_id],
63
+ i[:license_id], i[:nlines], i[:indexed_p])
64
+ info.members.each {|name|
65
+ name = name.intern
66
+ assert_equal(i[name], info.send(name))
67
+ }
68
+ i.each_key {|name|
69
+ assert_equal(i[name], info.send(name))
70
+ }
71
+ end
72
+
73
+ def test_minus_mtime
74
+ size = 100
75
+ mtime = -1
76
+ itime = Time.now.to_i
77
+ format_id = license_id = nlines = indexed_p = 0
78
+ packed = Gonzui::ContentInfo.dump(size, mtime, itime, format_id,
79
+ license_id, nlines, indexed_p)
80
+ assert(packed.is_a?(String))
81
+ end
82
+ end
@@ -0,0 +1,49 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_test-util'
4
+
5
+ class LicenseTest < Test::Unit::TestCase
6
+ TestCases = [
7
+ ["GPL1", false, "GNU General Public License version 1"],
8
+ ["GPL2", false, "GNU General Public License version 2"],
9
+ ["LGPL1", false, "GNU Library Public License version 1"],
10
+ ["LGPL2", false, "GNU Library Public License version 2"],
11
+ ["LGPL2.1", false, "GNU Lesser Public License version 2.1"],
12
+ ["Other", false, "My own license version 999"],
13
+
14
+ ["GPL2", false, "GNU GENERAL PUBLIC LICENSE VERSION 2"],
15
+ ["GPL2", false, "GNU GENERAL PUBLIC LICENSE VERSION 2"],
16
+ ["GPL2", false, "GNU/GENERAL/PUBLIC/LICENSE/VERSION/2"],
17
+
18
+ ["GPL2", false, '
19
+ # You can redistribute it and/or modify it under the terms of
20
+ # the GNU General Public License version 2.
21
+ '
22
+ ],
23
+
24
+ ["GPL2", false, '
25
+ # You can redistribute it and/or modify it under the terms of
26
+ # the GNU General Public License version 2.
27
+ #
28
+ # This is foobar version 1. <= confusing!
29
+ '
30
+ ],
31
+
32
+ ["GPL2", true, '
33
+ This program is free software; you can redistribute it and/or modify
34
+ it under the terms of the GNU General Public License as published by
35
+ the Free Software Foundation; either version 2, or (at your option)
36
+ any later version.'
37
+ ],
38
+ ]
39
+
40
+ def test_license_detector
41
+ TestCases.each {|abbrev, allow_later_p, text|
42
+ detector = Gonzui::LicenseDetector.new(text)
43
+ license = detector.detect
44
+ assert_equal(abbrev, license.abbrev)
45
+ assert_equal(allow_later_p, license.allow_later?)
46
+ }
47
+ end
48
+ end
49
+
@@ -0,0 +1,60 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_test-util'
4
+ require 'time'
5
+
6
+ class LoggerTest < Test::Unit::TestCase
7
+ def create_test_case
8
+ format = "foo %s"
9
+ arguments = ["bar"]
10
+ message = sprintf(format, arguments)
11
+ return format, arguments, message
12
+ end
13
+
14
+ def test_log
15
+ format, arguments, message = create_test_case
16
+
17
+ strio = StringIO.new
18
+ logger = Gonzui::Logger.new(strio)
19
+ a = Time.now
20
+ logger.log(format, *arguments)
21
+
22
+ log = strio.string
23
+ m = /^(.*?) (.*)/.match(log)
24
+ assert(m.is_a?(MatchData))
25
+ assert_equal(message, m[2])
26
+
27
+ time = Time.parse(m[1])
28
+ assert(time.is_a?(Time))
29
+ assert((time - a).abs < 1) # within 1 sec
30
+ end
31
+
32
+ def test_vlog
33
+ format, arguments, message = create_test_case
34
+
35
+ strio = StringIO.new
36
+ logger = Gonzui::Logger.new(strio, false)
37
+ logger.vlog(format, arguments)
38
+ assert(strio.string.empty?)
39
+
40
+ logger = Gonzui::Logger.new(strio, true)
41
+ logger.vlog(format, arguments)
42
+ assert(/^.*? #{message}/.match(strio.string))
43
+ end
44
+
45
+ def test_monitor
46
+ format, arguments, message = create_test_case
47
+ strio1 = StringIO.new
48
+ strio2 = StringIO.new
49
+ logger = Gonzui::Logger.new(strio1)
50
+ logger.log(format, arguments)
51
+ assert_equal(false, strio1.string.empty?)
52
+ assert(strio2.string.empty?)
53
+
54
+ logger.monitor = strio2
55
+ logger.log(format, arguments)
56
+ assert_equal(false, strio2.string.empty?)
57
+ assert(strio1.string.length > strio2.string.length)
58
+ end
59
+ end
60
+
@@ -0,0 +1,23 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_test-util'
4
+
5
+ class MonitorTest < Test::Unit::TestCase
6
+ include TestUtil
7
+
8
+ def foo
9
+ 1
10
+ end
11
+
12
+ def test_monitor
13
+ monitor = Gonzui::PerformanceMonitor.new
14
+ assert(monitor.empty?)
15
+ assert_equal("", monitor.format([MonitorTest, :foo]))
16
+ monitor.profile(self, :foo)
17
+ assert(!monitor.empty?)
18
+ summary = monitor.format([MonitorTest, :foo],
19
+ [MonitorTest, :foo])
20
+ assert(summary.is_a?(String))
21
+
22
+ end
23
+ end
@@ -0,0 +1,37 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_external_tools'
4
+ require '_test-util'
5
+
6
+ class SearcherTest < Test::Unit::TestCase
7
+ include TestUtil
8
+
9
+ def setup
10
+ @dbm = nil
11
+ end
12
+ def teardown
13
+ unless @dbm.nil?
14
+ @dbm.close rescue nil
15
+ end
16
+ @dbm = nil
17
+ end
18
+
19
+ def test_searcher
20
+ config = Gonzui::Config.new
21
+ make_db(config)
22
+ dbm = Gonzui::DBM.open(config)
23
+ @dbm = dbm
24
+ search_query = Gonzui::SearchQuery.new(config, "foo")
25
+ searcher = Gonzui::Searcher.new(dbm, search_query, 100)
26
+ result = searcher.search
27
+ assert(result.is_a?(Gonzui::SearchResult))
28
+ assert(result.length > 0)
29
+
30
+ search_query = Gonzui::SearchQuery.new(config, "205438967we9tn8we09asf")
31
+ searcher = Gonzui::Searcher.new(dbm, search_query, 100)
32
+ result = searcher.search
33
+ assert_equal(0, result.length)
34
+
35
+ dbm.close
36
+ end
37
+ end if (ARC_)
@@ -0,0 +1,27 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_test-util'
4
+
5
+ class QueryTest < Test::Unit::TestCase
6
+ def test_query
7
+ config = Gonzui::Config.new
8
+ [
9
+ ['foo bar', [["foo", nil], ["bar", nil]]],
10
+ ['fundef:foo bar', [["foo", :fundef], ["bar", nil]]],
11
+ ['"foo bar" baz', [["foo bar", nil], ["baz", nil]]]
12
+ ].each {|query_string, parts|
13
+ query = Gonzui::SearchQuery.new(config, query_string)
14
+ query.each {|item|
15
+ assert(item.is_a?(Gonzui::QueryItem))
16
+ part = parts.shift
17
+ if item.phrase?
18
+ assert_equal(part.first, item.value.join(" "))
19
+ else
20
+ assert_equal(part.first, item.value)
21
+ end
22
+ assert_equal(part.last, item.property)
23
+ }
24
+ }
25
+ end
26
+ end
27
+
@@ -0,0 +1,43 @@
1
+ #! /usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/test_helper.rb'
3
+ require '_external_tools'
4
+ require '_test-util'
5
+
6
+ class SearchResultTest < Test::Unit::TestCase
7
+ include TestUtil
8
+
9
+ def _test_basic(result)
10
+ i = 0
11
+ result.each {|item| i += 1}
12
+ assert_equal(result.length, i)
13
+ result.length.times {|i| assert(result[i].is_a?(Gonzui::WordInfo)) }
14
+
15
+ assert_equal(result[0], result.first)
16
+ assert_equal(result[result.length - 1], result.last)
17
+ end
18
+
19
+ def _test_clear(result)
20
+ result.clear
21
+ assert(result.empty?)
22
+ assert(result.length == 0)
23
+ end
24
+
25
+ def search(config, key)
26
+ result = Gonzui::SearchResult.new
27
+ Gonzui::DBM.open(config) {|dbm|
28
+ dbm.find_all(key).each {|info| result.push(info) }
29
+ }
30
+ return result
31
+ end
32
+
33
+ def test_search_result
34
+ config = Gonzui::Config.new
35
+ make_db(config)
36
+
37
+ result = search(config, "foo")
38
+ _test_basic(result)
39
+ _test_clear(result)
40
+
41
+ remove_db(config)
42
+ end
43
+ end if (ARC_)