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.
- data/VERSION +1 -1
 - data/bin/gmilk +1 -1
 - data/bin/milk +1 -1
 - data/lib/milkode/cdstk/cdstk.rb +337 -117
 - data/lib/milkode/cdstk/cli_cdstk.rb +27 -9
 - data/lib/milkode/cdstk/cli_cdstksub.rb +44 -6
 - data/lib/milkode/cdstk/milkode_yaml.rb +105 -0
 - data/lib/milkode/cdstk/package.rb +83 -0
 - data/lib/milkode/cdstk/yaml_file_wrapper.rb +94 -0
 - data/lib/milkode/cdweb/app.rb +6 -28
 - data/lib/milkode/cdweb/lib/database.rb +6 -0
 - data/lib/milkode/cdweb/lib/grep.rb +28 -0
 - data/lib/milkode/cdweb/lib/mkurl.rb +2 -0
 - data/lib/milkode/cdweb/lib/search_contents.rb +49 -10
 - data/lib/milkode/cdweb/views/filelist.haml +2 -6
 - data/lib/milkode/cdweb/views/header_menu.haml +5 -0
 - data/lib/milkode/cdweb/views/search.haml +4 -8
 - data/lib/milkode/cdweb/views/search_form.haml +22 -0
 - data/lib/milkode/cdweb/views/view.haml +2 -6
 - data/lib/milkode/common/ignore_checker.rb +34 -0
 - data/lib/milkode/common/ignore_setting.rb +62 -0
 - data/lib/milkode/grep/cli_grep.rb +10 -9
 - data/milkode.gemspec +18 -5
 - data/test/data/.gitignore +42 -0
 - data/test/data/no_auto_ignore/.gitignore +1 -0
 - data/test/data/no_auto_ignore/a.txt +3 -0
 - data/test/milkode_test_work.rb +2 -2
 - data/test/test_cdstk.rb +17 -12
 - data/test/test_database.rb +4 -4
 - data/test/test_ignore_checker.rb +26 -0
 - data/test/test_ignore_setting.rb +113 -0
 - data/test/test_milkode_yaml.rb +149 -0
 - data/test/test_package.rb +73 -0
 - data/test/test_yaml_file_wrapper.rb +97 -0
 - metadata +19 -6
 - data/lib/milkode/cdstk/cdstk_yaml.rb +0 -140
 - data/test/test_cdstk_yaml.rb +0 -167
 
| 
         @@ -19,6 +19,7 @@ The most commonly used #{File.basename($0)} are: 
     | 
|
| 
       19 
19 
     | 
    
         
             
              dir         Disp package dir.
         
     | 
| 
       20 
20 
     | 
    
         
             
              dump        Dump records.
         
     | 
| 
       21 
21 
     | 
    
         
             
              grep        Print lines matching a pattern
         
     | 
| 
      
 22 
     | 
    
         
            +
              ignore      Ignore setting.
         
     | 
| 
       22 
23 
     | 
    
         
             
              info        Disp information.
         
     | 
| 
       23 
24 
     | 
    
         
             
              init        Init db.
         
     | 
| 
       24 
25 
     | 
    
         
             
              list        List packages. 
         
     | 
| 
         @@ -49,35 +50,40 @@ EOF 
     | 
|
| 
       49 
50 
     | 
    
         
             
                  suboptions = Hash.new
         
     | 
| 
       50 
51 
     | 
    
         | 
| 
       51 
52 
     | 
    
         
             
                  subopt['init'], suboptions['init'] = CLI_Cdstksub.setup_init
         
     | 
| 
       52 
     | 
    
         
            -
                  subopt['add'] = CLI_Cdstksub.setup_add
         
     | 
| 
      
 53 
     | 
    
         
            +
                  subopt['add'], suboptions['add'] = CLI_Cdstksub.setup_add
         
     | 
| 
       53 
54 
     | 
    
         
             
                  subopt['update'], suboptions['update'] = CLI_Cdstksub.setup_update
         
     | 
| 
       54 
55 
     | 
    
         
             
                  subopt['remove'], suboptions['remove'] = CLI_Cdstksub.setup_remove
         
     | 
| 
       55 
56 
     | 
    
         
             
                  subopt['list'], suboptions['list'] = CLI_Cdstksub.setup_list
         
     | 
| 
       56 
57 
     | 
    
         
             
                  subopt['pwd'], suboptions['pwd'] = CLI_Cdstksub.setup_pwd
         
     | 
| 
       57 
58 
     | 
    
         
             
                  subopt['cleanup'], suboptions['cleanup'] = CLI_Cdstksub.setup_cleanup
         
     | 
| 
       58 
     | 
    
         
            -
                  subopt['rebuild'] =  
     | 
| 
      
 59 
     | 
    
         
            +
                  subopt['rebuild'], suboptions['rebuild'] = CLI_Cdstksub.setup_rebuild
         
     | 
| 
       59 
60 
     | 
    
         
             
                  subopt['dump'] = OptionParser.new("#{File.basename($0)} dump")
         
     | 
| 
       60 
61 
     | 
    
         
             
                  subopt['web'], suboptions['web'] = CLI_Cdstksub.setup_web
         
     | 
| 
       61 
62 
     | 
    
         
             
                  subopt['dir'], suboptions['dir'] = CLI_Cdstksub.setup_dir
         
     | 
| 
       62 
63 
     | 
    
         
             
                  subopt['setdb'], suboptions['setdb'] = CLI_Cdstksub.setup_setdb
         
     | 
| 
       63 
64 
     | 
    
         
             
                  subopt['mcd'], suboptions['mcd'] = CLI_Cdstksub.setup_mcd
         
     | 
| 
       64 
65 
     | 
    
         
             
                  subopt['info'], suboptions['info'] = CLI_Cdstksub.setup_info
         
     | 
| 
      
 66 
     | 
    
         
            +
                  subopt['ignore'], suboptions['ignore'] = CLI_Cdstksub.setup_ignore
         
     | 
| 
       65 
67 
     | 
    
         | 
| 
       66 
68 
     | 
    
         
             
                  if (subopt[subcommand])
         
     | 
| 
       67 
69 
     | 
    
         
             
                    subopt[subcommand].parse!(arguments) unless arguments.empty?
         
     | 
| 
       68 
70 
     | 
    
         
             
                    init_default = suboptions['init'][:init_default]
         
     | 
| 
       69 
71 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                    db_dir = select_dbdir(subcommand, init_default)
         
     | 
| 
      
 72 
     | 
    
         
            +
                    db_dir = select_dbdir(subcommand, init_default, arguments)
         
     | 
| 
       71 
73 
     | 
    
         
             
                    obj = Cdstk.new(stdout, db_dir)
         
     | 
| 
       72 
74 
     | 
    
         | 
| 
       73 
75 
     | 
    
         
             
                    case subcommand
         
     | 
| 
       74 
76 
     | 
    
         
             
                    when 'init'
         
     | 
| 
       75 
     | 
    
         
            -
                       
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
      
 77 
     | 
    
         
            +
                      if (arguments.size <= 1)
         
     | 
| 
      
 78 
     | 
    
         
            +
                        FileUtils.mkdir_p db_dir if (init_default || init_specify_dbddir?(arguments))
         
     | 
| 
      
 79 
     | 
    
         
            +
                        obj.init(suboptions[subcommand])
         
     | 
| 
      
 80 
     | 
    
         
            +
                      else
         
     | 
| 
      
 81 
     | 
    
         
            +
                        $stderr.puts "milk init [db_dir] (Cannot specify two 'db_dir')"
         
     | 
| 
      
 82 
     | 
    
         
            +
                      end
         
     | 
| 
       77 
83 
     | 
    
         
             
                    when 'update'
         
     | 
| 
       78 
84 
     | 
    
         
             
                      obj.update(arguments, suboptions[subcommand])
         
     | 
| 
       79 
85 
     | 
    
         
             
                    when 'add'
         
     | 
| 
       80 
     | 
    
         
            -
                      obj.add(arguments)
         
     | 
| 
      
 86 
     | 
    
         
            +
                      obj.add(arguments, suboptions[subcommand])
         
     | 
| 
       81 
87 
     | 
    
         
             
                    when 'remove'
         
     | 
| 
       82 
88 
     | 
    
         
             
                      obj.remove(arguments, suboptions[subcommand])
         
     | 
| 
       83 
89 
     | 
    
         
             
                    when 'list'
         
     | 
| 
         @@ -87,7 +93,7 @@ EOF 
     | 
|
| 
       87 
93 
     | 
    
         
             
                    when 'cleanup'
         
     | 
| 
       88 
94 
     | 
    
         
             
                      obj.cleanup(suboptions[subcommand])
         
     | 
| 
       89 
95 
     | 
    
         
             
                    when 'rebuild'
         
     | 
| 
       90 
     | 
    
         
            -
                      obj.rebuild
         
     | 
| 
      
 96 
     | 
    
         
            +
                      obj.rebuild(arguments, suboptions[subcommand])
         
     | 
| 
       91 
97 
     | 
    
         
             
                    when 'dump'
         
     | 
| 
       92 
98 
     | 
    
         
             
                      obj.dump
         
     | 
| 
       93 
99 
     | 
    
         
             
                    when 'web'
         
     | 
| 
         @@ -101,6 +107,12 @@ EOF 
     | 
|
| 
       101 
107 
     | 
    
         
             
                      obj.mcd(arguments, suboptions[subcommand])
         
     | 
| 
       102 
108 
     | 
    
         
             
                    when 'info'
         
     | 
| 
       103 
109 
     | 
    
         
             
                      obj.info(arguments, suboptions[subcommand])
         
     | 
| 
      
 110 
     | 
    
         
            +
                    when 'ignore'
         
     | 
| 
      
 111 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 112 
     | 
    
         
            +
                        obj.ignore(arguments, suboptions[subcommand])
         
     | 
| 
      
 113 
     | 
    
         
            +
                      rescue IgnoreError => e
         
     | 
| 
      
 114 
     | 
    
         
            +
                        stdout.puts e.message
         
     | 
| 
      
 115 
     | 
    
         
            +
                      end
         
     | 
| 
       104 
116 
     | 
    
         
             
                    end
         
     | 
| 
       105 
117 
     | 
    
         
             
                  else
         
     | 
| 
       106 
118 
     | 
    
         
             
                    if subcommand
         
     | 
| 
         @@ -111,9 +123,11 @@ EOF 
     | 
|
| 
       111 
123 
     | 
    
         
             
                  end
         
     | 
| 
       112 
124 
     | 
    
         
             
                end
         
     | 
| 
       113 
125 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
                def self.select_dbdir(subcommand, init_default)
         
     | 
| 
      
 126 
     | 
    
         
            +
                def self.select_dbdir(subcommand, init_default, arguments)
         
     | 
| 
       115 
127 
     | 
    
         
             
                  if (subcommand == 'init')
         
     | 
| 
       116 
     | 
    
         
            -
                    if ( 
     | 
| 
      
 128 
     | 
    
         
            +
                    if (init_specify_dbddir?(arguments))
         
     | 
| 
      
 129 
     | 
    
         
            +
                      arguments[0]
         
     | 
| 
      
 130 
     | 
    
         
            +
                    elsif (init_default)
         
     | 
| 
       117 
131 
     | 
    
         
             
                      Dbdir.default_dir
         
     | 
| 
       118 
132 
     | 
    
         
             
                    else
         
     | 
| 
       119 
133 
     | 
    
         
             
                      '.'
         
     | 
| 
         @@ -126,6 +140,10 @@ EOF 
     | 
|
| 
       126 
140 
     | 
    
         
             
                    end
         
     | 
| 
       127 
141 
     | 
    
         
             
                  end
         
     | 
| 
       128 
142 
     | 
    
         
             
                end
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
                def self.init_specify_dbddir?(arguments)
         
     | 
| 
      
 145 
     | 
    
         
            +
                  arguments.size == 1
         
     | 
| 
      
 146 
     | 
    
         
            +
                end
         
     | 
| 
       129 
147 
     | 
    
         | 
| 
       130 
148 
     | 
    
         
             
              end
         
     | 
| 
       131 
149 
     | 
    
         
             
            end
         
     | 
| 
         @@ -10,8 +10,9 @@ module Milkode 
     | 
|
| 
       10 
10 
     | 
    
         
             
                def self.setup_init
         
     | 
| 
       11 
11 
     | 
    
         
             
                  options = {:init_default => false}
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
                  opt = OptionParser.new("#{File.basename($0)} init")
         
     | 
| 
      
 13 
     | 
    
         
            +
                  opt = OptionParser.new("#{File.basename($0)} init [db_dir]")
         
     | 
| 
       14 
14 
     | 
    
         
             
                  opt.on('--default', 'Init default db, ENV[\'MILKODE_DEFAULT_DIR\'] or ~/.milkode.') { options[:init_default] = true }
         
     | 
| 
      
 15 
     | 
    
         
            +
                  opt.on('-s', '--setdb', 'With setdb.') { options[:setdb] = true }
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
       16 
17 
     | 
    
         
             
                  return opt, options
         
     | 
| 
       17 
18 
     | 
    
         
             
                end
         
     | 
| 
         @@ -19,8 +20,10 @@ module Milkode 
     | 
|
| 
       19 
20 
     | 
    
         
             
                def self.setup_add
         
     | 
| 
       20 
21 
     | 
    
         
             
                  bin = File.basename($0)
         
     | 
| 
       21 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
                  options = {:ignore => []}
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
       22 
25 
     | 
    
         
             
                  opt = OptionParser.new(<<EOF)
         
     | 
| 
       23 
     | 
    
         
            -
            #{bin} add  
     | 
| 
      
 26 
     | 
    
         
            +
            #{bin} add dir1 [dir2 ...]
         
     | 
| 
       24 
27 
     | 
    
         
             
            usage:
         
     | 
| 
       25 
28 
     | 
    
         
             
              #{bin} add /path/to/dir1
         
     | 
| 
       26 
29 
     | 
    
         
             
              #{bin} add /path/to/dir2 /path/to/dir3
         
     | 
| 
         @@ -28,9 +31,15 @@ usage: 
     | 
|
| 
       28 
31 
     | 
    
         
             
              #{bin} add /path/to/zipfile.zip
         
     | 
| 
       29 
32 
     | 
    
         
             
              #{bin} add /path/to/addon.xpi
         
     | 
| 
       30 
33 
     | 
    
         
             
              #{bin} add http://example.com/urlfile.zip
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            option:
         
     | 
| 
       31 
36 
     | 
    
         
             
            EOF
         
     | 
| 
      
 37 
     | 
    
         
            +
                  # opt.on('-n NAME', '--name NAME', 'Specify name (default: File.basename(dir))') {|v| options[:name] = v }
         
     | 
| 
      
 38 
     | 
    
         
            +
                  opt.on('-i PATH', '--ignore PATH', 'Ignore path.') {|v| options[:ignore] << v }
         
     | 
| 
      
 39 
     | 
    
         
            +
                  opt.on('--no-auto-ignore', 'Disable auto ignore (.gitignore)') { options[:no_auto_ignore] = true }
         
     | 
| 
      
 40 
     | 
    
         
            +
                  opt.on('-v', '--verbose', 'Be verbose.')   { options[:verbose] = true }
         
     | 
| 
       32 
41 
     | 
    
         | 
| 
       33 
     | 
    
         
            -
                  opt
         
     | 
| 
      
 42 
     | 
    
         
            +
                  return opt, options
         
     | 
| 
       34 
43 
     | 
    
         
             
                end
         
     | 
| 
       35 
44 
     | 
    
         | 
| 
       36 
45 
     | 
    
         
             
                def self.setup_update
         
     | 
| 
         @@ -38,6 +47,7 @@ EOF 
     | 
|
| 
       38 
47 
     | 
    
         | 
| 
       39 
48 
     | 
    
         
             
                  opt = OptionParser.new("#{File.basename($0)} update [keyword1 keyword2 ...]")
         
     | 
| 
       40 
49 
     | 
    
         
             
                  opt.on('--all', 'Update all.') { options[:all] = true }
         
     | 
| 
      
 50 
     | 
    
         
            +
                  opt.on('-v', '--verbose', 'Be verbose.') { options[:verbose] = true }
         
     | 
| 
       41 
51 
     | 
    
         | 
| 
       42 
52 
     | 
    
         
             
                  return opt, options
         
     | 
| 
       43 
53 
     | 
    
         
             
                end
         
     | 
| 
         @@ -45,8 +55,10 @@ EOF 
     | 
|
| 
       45 
55 
     | 
    
         
             
                def self.setup_remove
         
     | 
| 
       46 
56 
     | 
    
         
             
                  options = {:force => false}
         
     | 
| 
       47 
57 
     | 
    
         | 
| 
       48 
     | 
    
         
            -
                  opt = OptionParser.new("#{File.basename($0)} remove  
     | 
| 
       49 
     | 
    
         
            -
                  opt.on(' 
     | 
| 
      
 58 
     | 
    
         
            +
                  opt = OptionParser.new("#{File.basename($0)} remove keyword1 [keyword2 ...]")
         
     | 
| 
      
 59 
     | 
    
         
            +
                  opt.on('--all', 'Update all.') { options[:all] = true }
         
     | 
| 
      
 60 
     | 
    
         
            +
                  opt.on('-f', '--force',   'Force remove.') { options[:force] = true }
         
     | 
| 
      
 61 
     | 
    
         
            +
                  opt.on('-v', '--verbose', 'Be verbose.')   { options[:verbose] = true }
         
     | 
| 
       50 
62 
     | 
    
         | 
| 
       51 
63 
     | 
    
         
             
                  return opt, options
         
     | 
| 
       52 
64 
     | 
    
         
             
                end
         
     | 
| 
         @@ -78,6 +90,16 @@ EOF 
     | 
|
| 
       78 
90 
     | 
    
         
             
                  return opt, options
         
     | 
| 
       79 
91 
     | 
    
         
             
                end
         
     | 
| 
       80 
92 
     | 
    
         | 
| 
      
 93 
     | 
    
         
            +
                def self.setup_rebuild
         
     | 
| 
      
 94 
     | 
    
         
            +
                  options = {}
         
     | 
| 
      
 95 
     | 
    
         
            +
                  
         
     | 
| 
      
 96 
     | 
    
         
            +
                  opt = OptionParser.new("#{File.basename($0)} keyword1 [keyword2 ...]")
         
     | 
| 
      
 97 
     | 
    
         
            +
                  opt.on('--all', 'Rebuild all.') { options[:all] = true}
         
     | 
| 
      
 98 
     | 
    
         
            +
                  opt.on('-v', '--verbose', 'Be verbose.') { options[:verbose] = true }
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  return opt, options
         
     | 
| 
      
 101 
     | 
    
         
            +
                end
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
       81 
103 
     | 
    
         
             
                def self.setup_web
         
     | 
| 
       82 
104 
     | 
    
         
             
                  options = {
         
     | 
| 
       83 
105 
     | 
    
         
             
                    :environment => ENV['RACK_ENV'] || "development",
         
     | 
| 
         @@ -121,7 +143,7 @@ EOF 
     | 
|
| 
       121 
143 
     | 
    
         
             
                  options = {}
         
     | 
| 
       122 
144 
     | 
    
         | 
| 
       123 
145 
     | 
    
         
             
                  opt = OptionParser.new("#{File.basename($0)} setdb")
         
     | 
| 
       124 
     | 
    
         
            -
                  opt.on('--reset', 'Reset default db.') {|v| options[:reset] = true }
         
     | 
| 
      
 146 
     | 
    
         
            +
                  opt.on('--default', '--reset', 'Reset default db.') {|v| options[:reset] = true }
         
     | 
| 
       125 
147 
     | 
    
         | 
| 
       126 
148 
     | 
    
         
             
                  return opt, options
         
     | 
| 
       127 
149 
     | 
    
         
             
                end
         
     | 
| 
         @@ -141,5 +163,21 @@ EOF 
     | 
|
| 
       141 
163 
     | 
    
         | 
| 
       142 
164 
     | 
    
         
             
                  return opt, options
         
     | 
| 
       143 
165 
     | 
    
         
             
                end
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
                def self.setup_ignore
         
     | 
| 
      
 168 
     | 
    
         
            +
                  bin = File.basename($0)
         
     | 
| 
      
 169 
     | 
    
         
            +
                  
         
     | 
| 
      
 170 
     | 
    
         
            +
                  options = {}
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
                  opt = OptionParser.new("#{File.basename($0)} ignore [path ...]")
         
     | 
| 
      
 173 
     | 
    
         
            +
                  opt.on('-p PACKAGE', '--package PACKAGE', 'Specify ignore package.') {|v| options[:package] = v }
         
     | 
| 
      
 174 
     | 
    
         
            +
                  opt.on('-d', '--delete', 'Delete ignore') { options[:delete] = true }
         
     | 
| 
      
 175 
     | 
    
         
            +
                  opt.on('--delete-all', 'Delete all') { options[:delete_all] = true }
         
     | 
| 
      
 176 
     | 
    
         
            +
                  opt.on('--test', 'Ignore test, Display complete list') { options[:test] = true }
         
     | 
| 
      
 177 
     | 
    
         
            +
             
     | 
| 
      
 178 
     | 
    
         
            +
                  return opt, options
         
     | 
| 
      
 179 
     | 
    
         
            +
                end
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
       144 
182 
     | 
    
         
             
              end
         
     | 
| 
       145 
183 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,105 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # @file 
         
     | 
| 
      
 4 
     | 
    
         
            +
            # @brief
         
     | 
| 
      
 5 
     | 
    
         
            +
            # @author ongaeshi
         
     | 
| 
      
 6 
     | 
    
         
            +
            # @date   2012/02/21
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'milkode/cdstk/package'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'milkode/common/util'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            module Milkode
         
     | 
| 
      
 13 
     | 
    
         
            +
              class MilkodeYaml
         
     | 
| 
      
 14 
     | 
    
         
            +
                MILKODE_YAML_VERSION = '0.2'
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                EMPTY_YAML = <<EOF
         
     | 
| 
      
 17 
     | 
    
         
            +
            ---
         
     | 
| 
      
 18 
     | 
    
         
            +
            version: '#{MILKODE_YAML_VERSION}'
         
     | 
| 
      
 19 
     | 
    
         
            +
            contents: []
         
     | 
| 
      
 20 
     | 
    
         
            +
            EOF
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                attr_reader :contents
         
     | 
| 
      
 23 
     | 
    
         
            +
                
         
     | 
| 
      
 24 
     | 
    
         
            +
                def initialize(str = nil)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  @data = YAML.load(str || EMPTY_YAML)
         
     | 
| 
      
 26 
     | 
    
         
            +
                  @contents = parse_contents
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                def dump
         
     | 
| 
      
 30 
     | 
    
         
            +
                  YAML.dump(@data)
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def version
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @data['version']
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                # パッケージを追加
         
     | 
| 
      
 38 
     | 
    
         
            +
                def add(package)
         
     | 
| 
      
 39 
     | 
    
         
            +
                  @contents.push package
         
     | 
| 
      
 40 
     | 
    
         
            +
                  update_contents
         
     | 
| 
      
 41 
     | 
    
         
            +
                end
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                # 同名パッケージの内容を置き換え
         
     | 
| 
      
 44 
     | 
    
         
            +
                def update(package)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  i = @contents.find_index {|v| v.same_name?(package.name) }
         
     | 
| 
      
 46 
     | 
    
         
            +
                  raise unless i
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @contents[i] = package
         
     | 
| 
      
 48 
     | 
    
         
            +
                  update_contents
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                # パッケージを削除
         
     | 
| 
      
 52 
     | 
    
         
            +
                def remove(package)
         
     | 
| 
      
 53 
     | 
    
         
            +
                  @contents.delete(package)
         
     | 
| 
      
 54 
     | 
    
         
            +
                  update_contents
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                # 名前が同じパッケージを検索
         
     | 
| 
      
 58 
     | 
    
         
            +
                def find_name(name)
         
     | 
| 
      
 59 
     | 
    
         
            +
                  @contents.find {|v| v.same_name?(name)}
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                # ディレクトリ名が同じパッケージを検索
         
     | 
| 
      
 63 
     | 
    
         
            +
                def find_dir(directory)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  @contents.find {|v| v.directory == directory}
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                # 指定ディレクトリの所属するパッケージのルートディレクトリを得る。
         
     | 
| 
      
 68 
     | 
    
         
            +
                # 見つからない場合はnilを返す。
         
     | 
| 
      
 69 
     | 
    
         
            +
                def package_root(dir)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  nd = Util::normalize_filename dir
         
     | 
| 
      
 71 
     | 
    
         
            +
                  @contents.find do |v|
         
     | 
| 
      
 72 
     | 
    
         
            +
                    v if nd =~ /^#{v.directory}/
         
     | 
| 
      
 73 
     | 
    
         
            +
                  end
         
     | 
| 
      
 74 
     | 
    
         
            +
                end
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
                # マイグレーション
         
     | 
| 
      
 77 
     | 
    
         
            +
                def migrate
         
     | 
| 
      
 78 
     | 
    
         
            +
                  if (version != MILKODE_YAML_VERSION)
         
     | 
| 
      
 79 
     | 
    
         
            +
                    # バージョン番号
         
     | 
| 
      
 80 
     | 
    
         
            +
                    @data['version'] = MILKODE_YAML_VERSION
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
                    # パッケージ
         
     | 
| 
      
 83 
     | 
    
         
            +
                    contents.each{|v| v.migrate}
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                    # migrateが起きた
         
     | 
| 
      
 86 
     | 
    
         
            +
                    true
         
     | 
| 
      
 87 
     | 
    
         
            +
                  else
         
     | 
| 
      
 88 
     | 
    
         
            +
                    false
         
     | 
| 
      
 89 
     | 
    
         
            +
                  end
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                private
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                def parse_contents
         
     | 
| 
      
 95 
     | 
    
         
            +
                  @data['contents'].map do |v|
         
     | 
| 
      
 96 
     | 
    
         
            +
                    Package.new(v)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
                end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                def update_contents
         
     | 
| 
      
 101 
     | 
    
         
            +
                  @data['contents'] = @contents.map{|v| v.hash }
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
              end
         
     | 
| 
      
 104 
     | 
    
         
            +
            end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,83 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # @file 
         
     | 
| 
      
 4 
     | 
    
         
            +
            # @brief
         
     | 
| 
      
 5 
     | 
    
         
            +
            # @author ongaeshi
         
     | 
| 
      
 6 
     | 
    
         
            +
            # @date   2012/02/21
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'milkode/common/util'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module Milkode
         
     | 
| 
      
 11 
     | 
    
         
            +
              class Package
         
     | 
| 
      
 12 
     | 
    
         
            +
                def self.create(dir, ignore=nil)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  if ignore && ignore.size > 0
         
     | 
| 
      
 14 
     | 
    
         
            +
                    Package.new({"directory" => dir, "ignore" => ignore})
         
     | 
| 
      
 15 
     | 
    
         
            +
                  else
         
     | 
| 
      
 16 
     | 
    
         
            +
                    Package.new({"directory" => dir})
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end
         
     | 
| 
      
 18 
     | 
    
         
            +
                end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                def initialize(hash)
         
     | 
| 
      
 21 
     | 
    
         
            +
                  @hash = hash
         
     | 
| 
      
 22 
     | 
    
         
            +
                  normalize
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                def name
         
     | 
| 
      
 26 
     | 
    
         
            +
                  if options[:name]
         
     | 
| 
      
 27 
     | 
    
         
            +
                    options[:name]
         
     | 
| 
      
 28 
     | 
    
         
            +
                  else
         
     | 
| 
      
 29 
     | 
    
         
            +
                    File.basename(directory)
         
     | 
| 
      
 30 
     | 
    
         
            +
                  end
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                def directory
         
     | 
| 
      
 34 
     | 
    
         
            +
                  @hash['directory']
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def ignore
         
     | 
| 
      
 38 
     | 
    
         
            +
                  @hash['ignore'] || []
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                def set_ignore(ignore)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @hash['ignore'] = ignore
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def options
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @hash['options'] || {}
         
     | 
| 
      
 47 
     | 
    
         
            +
                end
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                def set_options(options)
         
     | 
| 
      
 50 
     | 
    
         
            +
                  @hash['options'] = options
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                def hash
         
     | 
| 
      
 54 
     | 
    
         
            +
                  @hash
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                def migrate
         
     | 
| 
      
 58 
     | 
    
         
            +
                  # 色々あって、ignore値はデフォルトで設定しないようにした
         
     | 
| 
      
 59 
     | 
    
         
            +
                  # @hash['ignore'] = [] unless ignore
         
     | 
| 
      
 60 
     | 
    
         
            +
                end
         
     | 
| 
      
 61 
     | 
    
         
            +
             
     | 
| 
      
 62 
     | 
    
         
            +
                # 同名パッケージか?
         
     | 
| 
      
 63 
     | 
    
         
            +
                def same_name?(a_name)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  name == a_name
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                # 同値検査
         
     | 
| 
      
 68 
     | 
    
         
            +
                def ==(rhs)
         
     | 
| 
      
 69 
     | 
    
         
            +
                  name == rhs.name && directory == rhs.directory && ignore == rhs.ignore
         
     | 
| 
      
 70 
     | 
    
         
            +
                end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                private
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                def normalize
         
     | 
| 
      
 75 
     | 
    
         
            +
                  if (Util::platform_win?)
         
     | 
| 
      
 76 
     | 
    
         
            +
                    @hash['directory'] = Util::normalize_filename(directory)
         
     | 
| 
      
 77 
     | 
    
         
            +
                  end
         
     | 
| 
      
 78 
     | 
    
         
            +
                end
         
     | 
| 
      
 79 
     | 
    
         
            +
                
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
            end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,94 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # @file 
         
     | 
| 
      
 4 
     | 
    
         
            +
            # @brief
         
     | 
| 
      
 5 
     | 
    
         
            +
            # @author ongaeshi
         
     | 
| 
      
 6 
     | 
    
         
            +
            # @date   2011/02/20
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 9 
     | 
    
         
            +
            require 'milkode/common/dbdir'
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'milkode/cdstk/milkode_yaml'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            module Milkode
         
     | 
| 
      
 13 
     | 
    
         
            +
              class YamlFileWrapper
         
     | 
| 
      
 14 
     | 
    
         
            +
                class YAMLAlreadyExist < RuntimeError ; end
         
     | 
| 
      
 15 
     | 
    
         
            +
                class YAMLNotExist < RuntimeError     ; end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                def self.yaml_file(path)
         
     | 
| 
      
 18 
     | 
    
         
            +
                  Dbdir.yaml_path(path)
         
     | 
| 
      
 19 
     | 
    
         
            +
                end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                def self.create(path = ".")
         
     | 
| 
      
 22 
     | 
    
         
            +
                  yf = yaml_file(path)
         
     | 
| 
      
 23 
     | 
    
         
            +
                  raise YAMLAlreadyExist.new if FileTest.exist? yf
         
     | 
| 
      
 24 
     | 
    
         
            +
                  obj = YamlFileWrapper.new(yf, MilkodeYaml.new)
         
     | 
| 
      
 25 
     | 
    
         
            +
                  obj.save
         
     | 
| 
      
 26 
     | 
    
         
            +
                  return obj
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                def self.load(path = ".")
         
     | 
| 
      
 30 
     | 
    
         
            +
                  yf = yaml_file(path)
         
     | 
| 
      
 31 
     | 
    
         
            +
                  raise YAMLNotExist.new unless FileTest.exist? yf
         
     | 
| 
      
 32 
     | 
    
         
            +
                  open(yf) do |f|
         
     | 
| 
      
 33 
     | 
    
         
            +
                    return YamlFileWrapper.new(yf, MilkodeYaml.new(f.read()))
         
     | 
| 
      
 34 
     | 
    
         
            +
                  end
         
     | 
| 
      
 35 
     | 
    
         
            +
                end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                def self.load_if(path = ".")
         
     | 
| 
      
 38 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 39 
     | 
    
         
            +
                    load(path)
         
     | 
| 
      
 40 
     | 
    
         
            +
                  rescue YAMLNotExist
         
     | 
| 
      
 41 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 42 
     | 
    
         
            +
                  end
         
     | 
| 
      
 43 
     | 
    
         
            +
                end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                def initialize(yaml_file, data)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @yaml_file = yaml_file
         
     | 
| 
      
 47 
     | 
    
         
            +
                  @data = data
         
     | 
| 
      
 48 
     | 
    
         
            +
                  migrate
         
     | 
| 
      
 49 
     | 
    
         
            +
                end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
                def contents
         
     | 
| 
      
 52 
     | 
    
         
            +
                  @data.contents
         
     | 
| 
      
 53 
     | 
    
         
            +
                end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
                def find_name(name)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  @data.find_name(name)
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
                def find_dir(dir)
         
     | 
| 
      
 60 
     | 
    
         
            +
                  @data.find_dir(dir)
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                def add(package)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  @data.add package
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                def update(package)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  @data.update package
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                def remove(package)
         
     | 
| 
      
 72 
     | 
    
         
            +
                  @data.remove package
         
     | 
| 
      
 73 
     | 
    
         
            +
                end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                def package_root(dir)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  @data.package_root(dir)
         
     | 
| 
      
 77 
     | 
    
         
            +
                end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                def save
         
     | 
| 
      
 80 
     | 
    
         
            +
                  open(@yaml_file, "w") { |f| f.write(@data.dump) }
         
     | 
| 
      
 81 
     | 
    
         
            +
                end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                def version
         
     | 
| 
      
 84 
     | 
    
         
            +
                  @data.version
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                def migrate
         
     | 
| 
      
 88 
     | 
    
         
            +
                  if (@data.migrate)
         
     | 
| 
      
 89 
     | 
    
         
            +
                    puts "milkode.yaml is old '#{version}'. Convert to '#{MilkodeYaml::MILKODE_YAML_VERSION}'."
         
     | 
| 
      
 90 
     | 
    
         
            +
                    save
         
     | 
| 
      
 91 
     | 
    
         
            +
                  end
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
              end
         
     | 
| 
      
 94 
     | 
    
         
            +
            end
         
     |