vimget 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/bin/vim-get ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # vim-get: a vim script manager
4
+ #
5
+ # $Id: vim-get 8 2008-03-26 17:32:26Z eddyxu $
6
+
7
+ begin
8
+ $: << "#{File.dirname(__FILE__)}/../lib"
9
+ require 'vimget'
10
+ rescue LoadError
11
+ require 'rubygems'
12
+ require 'vimget'
13
+ end
14
+
15
+ VimGet::application.run
@@ -0,0 +1,157 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # @file command.rb
4
+ #
5
+ # @breif parser and manager commands
6
+ #
7
+ # @author Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright 2008 by xulei.org
10
+ #
11
+ # $Id: command.rb 5 2008-04-11 18:33:39Z eddyxu $
12
+ #
13
+
14
+ require 'optparse'
15
+ require "vimget/configure"
16
+
17
+ module VimGet
18
+
19
+ # base class for all commands
20
+ class BaseCommand
21
+ PROGRAM = "vim-get"
22
+ # the name of command
23
+ attr_reader :command
24
+
25
+ # the options for this command
26
+ attr_reader :options
27
+
28
+ attr_reader :options_group
29
+
30
+ # the default options for the command
31
+ attr_accessor :defaults
32
+
33
+ # the name of the command for command-line invocation
34
+ attr_accessor :program_name
35
+
36
+ # A short description of the command
37
+ attr_accessor :summary
38
+
39
+ def initialize(command, summary = nil, defaults = {})
40
+ @command, @summary, @defaults = command, summary, defaults
41
+ @program_name = "#{PROGRAM} #{command}"
42
+ @options = defaults.dup
43
+ @parser = nil
44
+ @option_groups = Hash.new { |h,k| h[k] = [] }
45
+ end
46
+
47
+ def usage
48
+ @program_name
49
+ end
50
+
51
+ def show_help
52
+ parser.program_name = usage
53
+ puts @parser
54
+ end
55
+
56
+ def arguments
57
+ ""
58
+ end
59
+
60
+ def invoke(*args)
61
+ handle_options(args)
62
+ if @options[:help]
63
+ show_help
64
+ else
65
+ execute
66
+ end
67
+ end
68
+
69
+ def execute
70
+ raise 'Command without define execute function'
71
+ end
72
+
73
+ protected
74
+
75
+ def add_option(*opts, &handler)
76
+ group_name = Symbol === opts.first ? opts.shift : :options
77
+ @option_groups[group_name] << [opts, handler]
78
+ end
79
+
80
+ def remove_option(name)
81
+ @option_groups.each do |_, option_list|
82
+ option_list.reject! { |args, _| args.any? { |x| x =~ /^#{name}/ } }
83
+ end
84
+ end
85
+
86
+ def pop_one_argument
87
+ return nil if @rest.empty?
88
+ return @rest.shift
89
+ end
90
+
91
+ private
92
+
93
+ def handle_options(args)
94
+ @rest = parser.parse(*args)
95
+ @options[:args] = args
96
+ end
97
+
98
+ def parser
99
+ create_parser if @parser.nil?
100
+ @parser
101
+ end
102
+
103
+ def create_parser
104
+ @parser = OptionParser.new
105
+
106
+ if @summary
107
+ @parser.separator ""
108
+ @parser.separator " Summary:"
109
+ wrap(@summary, 80-4).split("\n").each do |l|
110
+ @parser.separator " #{l.strip}"
111
+ end
112
+ @parser.separator ""
113
+ end
114
+
115
+ unless arguments.empty?
116
+ @parser.separator(" Arguments:")
117
+ arguments.split(/\n/).each do |arg_desc|
118
+ @parser.separator(" #{arg_desc}")
119
+ end
120
+ @parser.separator("")
121
+ end
122
+
123
+ add_option(:common, '-h', '--help', 'display this help') {|v, opts| @options[:help] = true }
124
+ add_option(:common, '--debug', 'print debug informations') {|v, opts| VimGet.configure.debug = true }
125
+ add_option(:common, '--verbose', 'set verbose mode') {|v, opts| @options[:verbose] = true }
126
+
127
+ @option_groups.each do |grp, opts|
128
+ configure_options(grp, opts)
129
+ end
130
+
131
+ @parser.separator " Further information"
132
+ @parser.separator " http://vimget.rubyforge.org"
133
+ end
134
+
135
+ def configure_options(header, option_list)
136
+ return if option_list.nil? or option_list.empty?
137
+
138
+ header = header.to_s.empty? ? '' : "#{header} "
139
+ @parser.separator " #{header.capitalize}options:"
140
+
141
+ option_list.each do |args, handler|
142
+ dashes = args.select { |arg| arg =~ /^-/ }
143
+ @parser.on(*args) do |value|
144
+ handler.call(value, @options)
145
+ end
146
+ end
147
+
148
+ @parser.separator ''
149
+ end
150
+
151
+ def wrap(text, width)
152
+ text.gsub(/(.{1,#{width}})( +|$\n?)|(.{1,#{width}})/, "\\1\\3\n")
153
+ end
154
+
155
+ end
156
+
157
+ end
@@ -0,0 +1,126 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # Command Manager
4
+ #
5
+ # Eddy Xu <eddyxu@gmail.com>
6
+ #
7
+ # 2008 (c) Quarkware.com
8
+ #
9
+ # $Id: command_manager.rb 5 2008-04-11 18:33:39Z eddyxu $
10
+
11
+ require "vimget/exceptions"
12
+ require "vimget/configure"
13
+
14
+ module VimGet
15
+
16
+ class CommandManager
17
+ def self.instance
18
+ @command_manager ||= CommandManager.new
19
+ end
20
+
21
+ def initialize
22
+ end
23
+
24
+ def run(args)
25
+ process_args(args)
26
+ rescue StandardError => ex
27
+ puts "While execute vim-get...(#{ex.class})\n #{ex.to_s}"
28
+ puts ex.backtrace if VimGet.configure.debug
29
+ rescue Interrupt
30
+ puts "Interrupt"
31
+ exit 1
32
+ end
33
+
34
+
35
+ def process_args(args)
36
+ if ARGV.empty?
37
+ usage
38
+ exit 1
39
+ end
40
+
41
+ case ARGV[0]
42
+ when '-h', '--help'
43
+ usage
44
+ exit 1
45
+ when '-v', '--version', 'version'
46
+ version
47
+ when 'help'
48
+ ARGV[1] ? help(ARGV[1]) : help
49
+ end
50
+
51
+ cmd_obj = find_command(ARGV[0])
52
+ cmd_obj.invoke(ARGV.dup)
53
+ end
54
+
55
+
56
+ def usage
57
+ puts <<-USAGE
58
+ vim-get: the vim script management tool
59
+
60
+ Usage:
61
+ vim-get -h/--help
62
+ vim-get -v/--version
63
+ vim-get command [options] [arg1 argu2 ...]
64
+
65
+ Common options:
66
+ --debug display debug infomation
67
+ --verbose set verbose
68
+
69
+ Supported commands:
70
+ help provide help for special commands
71
+ version display version and runtime informations
72
+
73
+ install install a script
74
+ uninstall uninstall a script
75
+ upgrade upgrade outdated script
76
+ sync sync local script version database
77
+ clean clean all distributed files
78
+
79
+ list list local scripts
80
+ outdated list all outdated scripts
81
+ installed list all installed scripts
82
+
83
+ Further Infomation:
84
+ https://rubyforge.org/projects/vimget/
85
+
86
+ USAGE
87
+ end
88
+
89
+ def help(cmd="")
90
+ if cmd.empty?
91
+ usage
92
+ elsif cmd == "help"
93
+ nil
94
+ else
95
+ command_obj = find_command(cmd)
96
+ command_obj.show_help
97
+ end
98
+
99
+ exit 1
100
+ end
101
+
102
+ def version
103
+ puts "vim-get: vim script management tool #{VIMGET_VERSION}"
104
+ puts
105
+ puts "Runtime:"
106
+ puts " vim-get base dir: #{VimGet.configure.base_dir}"
107
+ puts " vim dir: #{VimGet.configure.vim_dir}"
108
+ exit 1
109
+ end
110
+
111
+ private
112
+
113
+ def find_command(cmd_str)
114
+ cmd_str = cmd_str.to_s
115
+
116
+ begin
117
+ const_name = cmd_str.capitalize.gsub(/_(.)/) {$1.upcase}
118
+ require "vimget/commands/#{cmd_str}_command"
119
+ VimGet::Commands.const_get("#{const_name}Command").new
120
+ rescue LoadError => ex
121
+ raise VimGet::CommandLineError, "Unknown command #{cmd_str}"
122
+ end
123
+
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # File: clean_command.rb
4
+ #
5
+ # Brief: clean command
6
+ #
7
+ # Author: Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright: 2008 (c) Quarkware.com
10
+ #
11
+ # $Id: clean_command.rb 5 2008-04-11 18:33:39Z eddyxu $
12
+ #
13
+
14
+ require "vimget/command"
15
+ require "vimget/configure"
16
+
17
+ module VimGet
18
+ module Commands
19
+
20
+ class CleanCommand < BaseCommand
21
+ def initialize
22
+ super('clean', 'clean all distributed files')
23
+
24
+ end
25
+
26
+ def execute
27
+ dir = VimGet.configure.distfiles_dir
28
+ puts "Cleaing..."
29
+
30
+ abs_dir = File.expand_path(dir)
31
+ Dir.glob(File.join(abs_dir,"*")).each { |f| File.delete(f) }
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,75 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # File: install_command.rb
4
+ #
5
+ # Brief: install command
6
+ #
7
+ # Author: Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright: 2008 (c) Quarkware.com
10
+ #
11
+ # $Id: install_command.rb 5 2008-04-11 18:33:39Z eddyxu $
12
+ #
13
+
14
+ require "vimget/command"
15
+ require "vimget/db"
16
+ require "vimget/exceptions"
17
+ require "vimget/webparser"
18
+ require "vimget/installer"
19
+
20
+
21
+ module VimGet
22
+ module Commands
23
+
24
+ class InstallCommand < BaseCommand
25
+ def initialize
26
+ super('install', "Install a script")
27
+
28
+ custom_options
29
+ end
30
+
31
+ def usage
32
+ "#{@program_name} [NAME]"
33
+ end
34
+
35
+ def arguments
36
+ "NAME name of script to install"
37
+ end
38
+
39
+ def execute
40
+ if @options[:install_id]
41
+ script = VimGet.db.find_with_id @options[:install_id]
42
+
43
+ if script.nil?
44
+ script = VimGet.parse_script_page(@options[:install_id])
45
+ VimGet.db.add(script)
46
+ end
47
+ else
48
+ @rest.shift if @rest.first == "install"
49
+ if @rest.empty?
50
+ raise CommandLineError, "Missing arguments"
51
+ end
52
+
53
+ name = @rest.first
54
+
55
+ script = VimGet.db.find(name)
56
+
57
+ raise UnknownScriptError, "Unknow script!" if script.nil?
58
+ end
59
+
60
+ installer = Installer.new(@options)
61
+ installer.install(script)
62
+ end
63
+
64
+ private
65
+
66
+ def custom_options
67
+ add_option(:install, '-i', '--id ID', Integer, "Install a script with script id") do |v, opts|
68
+ opts[:install_id] = v
69
+ end
70
+ add_option(:install, '--dry-run', "Do not modify anything") { |v, opts| opts[:dryrun] = v }
71
+ end
72
+ end
73
+
74
+ end
75
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # File: installed_command.rb
4
+ #
5
+ # Brief: installed command
6
+ #
7
+ # Author: Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright: 2008 (c) Quarkware.com
10
+ #
11
+ # $Id: installed_command.rb 6 2008-04-11 19:01:26Z eddyxu $
12
+ #
13
+
14
+ require "vimget/commands/list_command"
15
+
16
+ module VimGet
17
+
18
+ module Commands
19
+
20
+ class InstalledCommand < ListCommand
21
+ def initialize
22
+ super("installed", "Display all installed scripts")
23
+ options[:installed] = true
24
+ remove_option('--outdated')
25
+ remove_option('--installed')
26
+ end
27
+
28
+ def usage
29
+ @program_name
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby -wKU
2
+ #
3
+ # list command
4
+ #
5
+ # $Id: list_command.rb 5 2008-04-11 18:33:39Z eddyxu $
6
+
7
+ require "vimget/command"
8
+ require "vimget/db.rb"
9
+
10
+ module VimGet
11
+ module Commands
12
+
13
+ class ListCommand < BaseCommand
14
+ def initialize(name = 'list', summary = 'Display all script in local')
15
+ super(name,
16
+ summary,
17
+ :format => "plain")
18
+
19
+ add_customer_options
20
+ end
21
+
22
+ def usage
23
+ "#{program_name} [STRING]"
24
+ end
25
+
26
+ def execute
27
+ raise CommandLineError, "Ambiguous command!" if @options[:outdated] && @options[:installed]
28
+
29
+ if @options[:outdated]
30
+ puts "List outdated scripts"
31
+ elsif @options[:installed]
32
+ puts "List installed scripts"
33
+ else
34
+ puts "List scripts"
35
+ end
36
+
37
+ scripts = VimGet.db.search()
38
+
39
+ # Todo: decouple it to output module
40
+ scripts.each do |s|
41
+ if @options[:outdated] && !s.outdated?
42
+ next
43
+ elsif @options[:installed] && !s.installed?
44
+ next
45
+ end
46
+
47
+ if @options[:format] == "plain"
48
+ puts "[#{s.name}]"
49
+ puts "id: #{s.sid}"
50
+ puts "author: #{s.author}"
51
+ puts "installed: #{s.installed}"
52
+ puts "version: #{s.version}"
53
+ puts
54
+ #elsif @options[:format] == "xml"
55
+ # puts "<script name=\"#{s.name}\" id=\"#{s.sid}\">"
56
+ # puts "</script>"
57
+ end
58
+ end
59
+ end
60
+
61
+ private
62
+
63
+ def add_customer_options
64
+ #add_option(:list, '--xml', 'Display in XML Format') { |v,opts| opts[:format] = "xml" }
65
+ add_option(:list, '-o', '--outdated', 'List all outdated scripts') {|v,opts| opts[:outdated] = v}
66
+ add_option(:list, '-i', '--installed', 'List all installed scripts') {|v, opts| opts[:installed] = v}
67
+ end
68
+ end
69
+
70
+ end
71
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # File: outdated_command.rb
4
+ #
5
+ # Brief: outdated command
6
+ #
7
+ # Author: Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright: 2008 (c) Quarkware.com
10
+ #
11
+ # $Id: outdated_command.rb 6 2008-04-11 19:01:26Z eddyxu $
12
+ #
13
+
14
+ require "vimget/commands/list_command"
15
+
16
+ module VimGet
17
+
18
+ module Commands
19
+
20
+ class OutdatedCommand < ListCommand
21
+ def initialize
22
+ super("outdated", "Display all outdated scripts")
23
+ options[:outdated] = true
24
+ remove_option('--outdated')
25
+ remove_option('--installed')
26
+ end
27
+
28
+ def usage
29
+ @program_name
30
+ end
31
+ end
32
+ end
33
+
34
+ end
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # File: sync_command.rb
4
+ #
5
+ # Brief: do sync command
6
+ #
7
+ # Author: Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright: 2008 (c) Quarkware.com
10
+ #
11
+ # $Id: sync_command.rb 5 2008-04-11 18:33:39Z eddyxu $
12
+ #
13
+
14
+ require "vimget/command"
15
+ require "vimget/db"
16
+ require "vimget/webparser"
17
+
18
+ module VimGet
19
+ module Commands
20
+
21
+ class SyncCommand < BaseCommand
22
+ def initialize
23
+ super('sync', 'Sync with vim site')
24
+ end
25
+
26
+ def execute
27
+ puts "Syncing..."
28
+
29
+ db = VimGet.db
30
+ db.search().each do |s|
31
+ puts "-> sync #{s.name}.."
32
+ new_script = VimGet::parse_script_page(s.sid)
33
+ new_script.installed = s.installed
34
+ db.update(new_script)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,59 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # File uninstall.rb
4
+ #
5
+ # Brief act the uninstall operations
6
+ #
7
+ # Author Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright 2008 (c) Quarkware.com
10
+ #
11
+ # $Id: uninstall_command.rb 5 2008-04-11 18:33:39Z eddyxu $
12
+
13
+ require "vimget/command"
14
+ require "vimget/db"
15
+ require "vimget/installer"
16
+
17
+
18
+ module VimGet
19
+
20
+ module Commands
21
+
22
+ class UninstallCommand < BaseCommand
23
+ def initialize
24
+ super("uninstall", "Uninstall a script")
25
+
26
+ add_option("-i",
27
+ "--id ID",
28
+ Integer,
29
+ "Indicated the id of script to uninstall") { |v,opts| opts[:uninstall_id] = v }
30
+
31
+ add_option('--purge',
32
+ 'Remove all associated files, including vim-get manifest') { |v,opts| opts[:purge] = v }
33
+
34
+ add_option('--dry-run',
35
+ 'Do not motify any files') { |v,opts| opts[:dry_run] = v }
36
+ end
37
+
38
+ def execute
39
+ if @options[:uninstall_id]
40
+ script = VimGet.db.find_with_id(@options[:uninstall_id])
41
+ else
42
+ @rest.shift if @rest.first == "uninstall"
43
+ raise CommandLineError, "Missing arguments" if @rest.empty?
44
+
45
+ name = @rest.first
46
+ script = VimGet.db.find(name)
47
+ end
48
+
49
+ if script.nil?
50
+ raise UnknownScriptError, "This script is not installed yet."
51
+ end
52
+
53
+ installer = Installer.new(@options)
54
+ installer.uninstall(script)
55
+ end
56
+ end
57
+ end
58
+
59
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # File: upgrade_command.rb
4
+ #
5
+ # Brief: perform upgrading operation
6
+ #
7
+ # Author: Eddy Xu <eddyxu@gmail.com>
8
+ #
9
+ # Copyright: 2008 (c) Quarkware.com
10
+ #
11
+ # $Id: upgrade_command.rb 6 2008-04-11 19:01:26Z eddyxu $
12
+ #
13
+
14
+ require "vimget/command"
15
+ require "vimget/installer"
16
+ require "vimget/db"
17
+
18
+ module VimGet
19
+ module Commands
20
+
21
+ class UpgradeCommand < BaseCommand
22
+ def initialize
23
+ super('upgrade', 'upgrade outdated script(s)')
24
+ end
25
+
26
+ def execute
27
+ outdated_scripts = VimGet.db.get_outdated_scripts
28
+
29
+ if outdated_scripts.empty?
30
+ puts "There is no script outdated."
31
+ return
32
+ end
33
+
34
+ installer = Installer.new(@options)
35
+ outdated_scripts.each do |s|
36
+ installer.upgrade(s)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end