depends-client 0.2.0.beta3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -15,37 +15,56 @@ Depends is quite simple.
15
15
  ```bash
16
16
  gem install depends-client
17
17
  ```
18
- 2. Setup ~/.depends/config.rb
19
18
 
20
- ```ruby
21
- depend config --key <your key here>
22
- ```
23
-
24
- 3. Define a Depends file at the root of your source repository. The format is as follows:
25
- As of this release <code>source</code> is not longer necessary. The default location is always used.
19
+ 2. Define a Depends file at the root of your source repository. The format is as follows:
26
20
 
27
21
  ```ruby
28
- depend 'Qt', version: '4', destination: 'External/Qt'
29
- depend 'SevenZipSharp', version: '4', destination: 'External/SevenZipSharp'
30
- depend 'Sqlite', version: '4', destination: 'External/Sqlite'
31
- depend 'Xerces', version: '4', destination: 'External/Xerces'
32
- depend 'Xsd', version: '4', destination: 'External/Xsd'
22
+
23
+ source :depends
24
+
25
+ depend 'Qt', :version => '4', :destination => 'External/Qt'
26
+ depend 'SevenZipSharp', :version => '4', :destination => 'External/SevenZipSharp'
27
+ depend 'Sqlite', :version => '4', :destination => 'External/Sqlite'
28
+ depend 'Xerces', :version => '4', :destination => 'External/Xerces'
29
+ depend 'Xsd', :version => '4', :destination => 'External/Xsd'
33
30
 
34
31
  ```
35
32
 
33
+ _source_ defines that location of the depends server. Currently :local, :depends, or a string to some other depends
34
+ server, i.e. http://example.com.
35
+
36
36
  _depend_ defines what the dependency is, the version to install and the path to unpack it to
37
37
 
38
- 4. Execute Depends
38
+ 3. Execute Depends
39
39
  ```bash
40
40
  depend
41
41
  ```
42
42
 
43
- 5. Add your Depends file to source control
43
+ 4. Add your Depends file to source control
44
44
 
45
45
  _We also recomend that you add depends destinations to your gitignore and hgignore files._
46
46
 
47
- You're done! Packages are downloaded, extracted and installed per the instructions in your gem file.
47
+ Your done, packages are download, extracted and installed per the instructions in your gem file
48
+
49
+
50
+ Uploading A Dependency
51
+ ----------------------
52
+ This tutorial does not cover installing a depends server, but asuming that you have a depends server setup, adding a new
53
+ dependency is simple.
54
+
55
+ 1. Install Depends
56
+
57
+ ```bash
58
+ gem install depends
59
+ ````
60
+ 2. Setup a directory that models what you want to upload. I.e. Create /tmp/openssl and add some files to it.
61
+ 3. Package and upload
62
+
63
+ ```bash
64
+ depend upload -s /tmp/openssl -d 'depends' -n "OpenSSL" -v '1.2.3b'
65
+ ```
48
66
 
67
+ That's it, your package is created and uploaded to the depends server.
49
68
 
50
69
  The Future
51
70
  ==========
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'depends'
4
+ time = Benchmark.realtime do
5
+ begin
6
+ a = Depends::CommandFactory.build.new
7
+ a.run
8
+ rescue Depends::Exceptions::SubCommandMissing => e
9
+ Depends::Log.debug ("Exception: #{e.inspect}")
10
+ Depends::Log.fatal ("SubCommand is not defined #{e.message}")
11
+ Process.exit 1
12
+ end
13
+ end
14
+
15
+ Depends::Log.debug ":total_runtime => #{time*1000} milliseconds"
16
+
17
+
@@ -4,9 +4,19 @@ require 'net/http'
4
4
  require 'json'
5
5
  require 'fileutils'
6
6
  require 'logger'
7
+ require 'mixlib/log'
8
+ require 'mixlib/config'
9
+ require 'mixlib/cli'
7
10
  require 'digest/sha1'
8
11
  require 'multi_json'
9
- require 'mixlib/config'
12
+
13
+ if RUBY_PLATFORM =~ /mingw32|mswin32/
14
+ unless Gem.available?('win32-dir')
15
+ `gem install win32-dir`
16
+ Gem.clear_paths
17
+ end
18
+ require 'win32/dir'
19
+ end
10
20
 
11
21
  require 'depends/exceptions'
12
22
  require 'depends/config'
@@ -14,9 +24,11 @@ require 'depends/util'
14
24
  require 'depends/rest_client'
15
25
  require 'depends/dsl/depend'
16
26
  require 'depends/definition'
17
- require 'terminal-table'
27
+ require 'depends/log/formatter'
28
+ require 'depends/log'
29
+ require 'depends/command_factory'
18
30
 
31
+ require 'depends/commands/base'
19
32
  require 'depends/commands/install'
20
33
  require 'depends/commands/list'
21
- require 'depends/commands/versions'
22
34
  require 'depends/commands/upload'
@@ -0,0 +1,31 @@
1
+ module Depends
2
+ module CommandFactory
3
+ class << self
4
+ def build
5
+ subcommand_class
6
+ end
7
+
8
+ private
9
+ def subcommand_class
10
+ command_words = ARGV.select {|arg| arg =~ /^(([[:alnum:]])[[:alnum:]\_\-]+)$/ }
11
+ if command_words.empty?
12
+ return Depends::Commands::Install
13
+ end
14
+ command_words.collect! {|word| word.titleize }
15
+ command_options = []
16
+ subcommand_class = nil
17
+
18
+ while ( !subcommand_class ) && ( !command_words.empty? )
19
+ constant_case_name = command_words.join('')
20
+ command_options << constant_case_name
21
+ command_constant = Depends::Commands.constants.select { |i| i.eql? constant_case_name.to_sym}
22
+ unless command_constant.empty?
23
+ return "Depends::Commands::#{constant_case_name}".constantize
24
+ end
25
+ command_words.pop
26
+ end
27
+ raise Depends::Exceptions::SubCommandMissing, "Possible SubCommands: #{command_options} "
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,87 @@
1
+ module Depends
2
+ module Commands
3
+ class Base
4
+
5
+ include Mixlib::CLI
6
+
7
+ def initialize
8
+ super
9
+
10
+ trap("TERM") do
11
+ Depends::Commands::Base.fatal!("SIGTERM received, stopping", 1)
12
+ end
13
+
14
+ trap("INT") do
15
+ Depends::Commands::Base.fatal!("SIGINT received, stopping", 2)
16
+ end
17
+
18
+ processor, platform, *rest = RUBY_PLATFORM.split("-")
19
+
20
+ unless RUBY_PLATFORM =~ /mingw32|mswin32/
21
+ trap("QUIT") do
22
+ Depends::Log.info("SIGQUIT received, call stack:\n " + caller.join("\n "))
23
+ end
24
+
25
+ trap("HUP") do
26
+ Depends::Log.info("SIGHUP received, reconfiguring")
27
+ reconfigure
28
+ end
29
+ end
30
+
31
+ end
32
+
33
+ def reconfigure
34
+ parse_options
35
+ configure_depends
36
+ configure_logging
37
+ end
38
+
39
+ def run
40
+ reconfigure
41
+ setup_application
42
+ run_application
43
+ end
44
+
45
+
46
+ private
47
+ def configure_depends
48
+
49
+ if File.exist?('~/.depends')
50
+ Depends::Log.info "Loading config file from '~/.depends'"
51
+ Depends::Config.from_file('~/.depends')
52
+ end
53
+
54
+ FileUtils.mkdir_p Depends::Config.cache
55
+ end
56
+
57
+ def configure_logging
58
+ Depends::Log.formatter = Depends::Log::Formatter.new
59
+ Depends::Log.level = config[:log_level] || Logger::INFO
60
+ end
61
+
62
+ # Called prior to starting the application, by the run method
63
+ def setup_application
64
+ raise Depends::Exceptions::Application, "#{self.to_s}: you must override setup_application"
65
+ end
66
+
67
+ # Actually run the application
68
+ def run_application
69
+ raise Depends::Exceptions::Application, "#{self.to_s}: you must override run_application"
70
+ end
71
+
72
+ class << self
73
+
74
+ # Log a fatal error message to both STDERR and the Logger, exit the application
75
+ def fatal!(msg, err = -1)
76
+ Depends::Log.fatal(msg)
77
+ Process.exit err
78
+ end
79
+
80
+ def exit!(msg, err = -1)
81
+ Depends::Log.debug(msg)
82
+ Process.exit err
83
+ end
84
+ end
85
+ end
86
+ end
87
+ end
@@ -1,20 +1,21 @@
1
+ require 'benchmark'
1
2
  module Depends
2
3
  module Commands
3
- class Install
4
+ class Install < Depends::Commands::Base
4
5
 
5
- def run
6
+ banner "Install dependencies"
6
7
 
7
- if RUBY_PLATFORM =~ /mingw32|mswin32/
8
- begin
9
- require 'win32/dir'
10
- rescue LoadError
11
- color("Failed to require win32/dir, please make sure the gem is installed or in your bundle",:red)
12
- exit(1)
13
- end
14
- end
8
+ option :log_level,
9
+ :short => "-l LEVEL",
10
+ :long => "--log_level LEVEL",
11
+ :description => "Set the log level (debug, info, warn, error, fatal)",
12
+ :proc => Proc.new { |l| l.downcase.to_sym }
15
13
 
16
- Depends::Config.load
17
- say 'Installing Dependencies...'
14
+ def setup_application
15
+ Log.info "Installing dependencies..."
16
+ end
17
+
18
+ def run_application
18
19
  check_for_file
19
20
  load_depends_file
20
21
  download_extract
@@ -25,7 +26,7 @@ module Depends
25
26
  private
26
27
  def check_for_file
27
28
  unless Dir.entries(Dir.pwd).include?('Depends')
28
- color "Missing Depends file", :red
29
+ Depends::Log.error "Missing Depends file"
29
30
  exit 1
30
31
  end
31
32
  end
@@ -39,7 +40,7 @@ module Depends
39
40
  file = nil
40
41
  end
41
42
 
42
- say "Updating #{file} with external dependencies..." if file
43
+ Depends::Log.info "Updating #{file} with external dependencies..." if file
43
44
  unless file.nil?
44
45
  FileUtils.touch(file) unless File.exist? file
45
46
  ignore_file = File.read(file)
@@ -49,12 +50,13 @@ module Depends
49
50
  ignore.delete(line.chomp)
50
51
  end
51
52
  end
52
- File.open(file, 'a') do |f|
53
+ File.open(file, 'a') { |f|
53
54
  ignore.each do |i|
55
+ Depends::Log.debug "Adding #{i} to #{file}"
54
56
  f.puts ""
55
57
  f.puts i
56
58
  end
57
- end
59
+ }
58
60
  end
59
61
  end
60
62
 
@@ -64,31 +66,31 @@ module Depends
64
66
 
65
67
 
66
68
  def load_depends_file
67
- say "Loading Dependencies..."
69
+ Depends::Log.info "Loading Dependencies..."
68
70
  @def = Depends::DSL::Depend.evaluate('Depends')
69
71
  unless @def.unmet_dependencies.empty?
70
- color "You have unmet dependencies in your sources, #{@def.unmet_dependencies.inspect}", :red
72
+ Depends::Log.fatal "You have unmet dependencies in your sources, #{@def.unmet_dependencies.inspect}"
71
73
  Process.exit 1
72
74
  end
73
75
  end
74
76
 
75
77
 
76
78
  def download_extract
77
- say "Downloading and extracting missing dependencies..."
79
+ Depends::Log.info "Downloading and extracting missing dependencies..."
78
80
  @def.dependencies.each do |dep|
79
- file_name = "#{Util.depend_name_with_version(dep)}.zip"
81
+ file_name = "#{dep[:name]}-#{dep['number']}.zip"
80
82
  cache_file = File.join(Depends::Config.cache,file_name)
81
83
  cache_directory = File.join(Depends::Config.cache,File.basename(file_name,'.zip'))
82
84
 
83
85
  unless File.exist?(cache_file) # and Digest::SHA1.file(cache_file).to_s.eql? dep["sha1"]
84
- say "Downloading #{dep[:name]}..."
86
+ Depends::Log.info "Downloading #{dep[:name]}..."
85
87
  just_downloaded = true
86
88
  dep[:source].download_depend_version(dep[:name],dep["number"])
87
89
  end
88
90
 
89
91
  if just_downloaded or not File.exist? cache_directory
90
- say "Extracting #{cache_file}"
91
- Util.un_zip(cache_file,cache_directory)
92
+ Depends::Log.info "Extracting #{cache_file}"
93
+ Util.un_zip(cache_file,cache_directory) unless config[:dry_run]
92
94
  end
93
95
 
94
96
  end
@@ -96,10 +98,10 @@ module Depends
96
98
 
97
99
  def link
98
100
  @def.dependencies.each do |dep|
99
- source = File.join(Depends::Config.cache,File.basename(Util.depend_name_with_version(dep),'.zip'))
101
+ source = File.join(Depends::Config.cache,File.basename("#{dep[:name]}-#{dep['number']}",'.zip'))
100
102
  base_dir = File.dirname(dep[:destination])
101
103
  FileUtils.mkdir_p(base_dir) unless File.exist? base_dir
102
- say "Linking #{source} to #{dep[:destination]}"
104
+ Depends::Log.info "Linking #{source} to #{dep[:destination]}"
103
105
 
104
106
  if RUBY_PLATFORM =~ /mingw32|mswin32/
105
107
  Dir.delete dep[:destination] if File.exist? dep[:destination]
@@ -1,19 +1,72 @@
1
-
1
+ require 'benchmark'
2
2
  module Depends
3
3
  module Commands
4
- class List
4
+ class List < Depends::Commands::Base
5
+
6
+ banner "List dependencies"
7
+
8
+ option :log_level,
9
+ :short => "-l LEVEL",
10
+ :long => "--log_level LEVEL",
11
+ :description => "Set the log level (debug, info, warn, error, fatal)",
12
+ :proc => Proc.new { |l| l.downcase.to_sym }
13
+ option :versions,
14
+ :short => "-d depend",
15
+ :long => "--depend d",
16
+ :description => "List the versions for a depend"
5
17
 
6
- def run
7
- Depends::Config.load
8
- client = Depends::RestClient.new()
9
- deps = client.list
10
- headers = ['Name','Description']
11
- rows = deps.collect{ |i| [i['name'] ,i['description']] }
12
- table = Terminal::Table.new :title => "Dependencies", :headings => headers, :rows => rows
13
- puts table
18
+ def setup_application
19
+ Log.info "Getting Depends from sources..."
20
+ end
21
+
22
+ def run_application
23
+ check_for_file
24
+ load_depends_file
25
+ if config[:versions]
26
+ results = []
27
+ @def.sources.each do |source|
28
+ source_index = results.count
29
+ results[source_index] = {:source => source.source_url, :versions => []}
30
+ begin
31
+ dep = source.get_depend(config[:versions])
14
32
 
33
+ dep['versions'].each do |version|
34
+ results[source_index][:versions] << version.keep_if { |key| ['number','notes','publisher','sha1'].include?(key) }
35
+ end
36
+ rescue Nestful::ResourceNotFound
37
+ puts " Depend not found on source"
38
+ end
39
+ puts results.to_yaml
40
+ end
41
+ else
42
+ results = []
43
+ @def.sources.each do |source|
44
+ source_index = results.count
45
+ results[source_index] = {:source => source.source_url, :depends => []}
46
+ source.list.each do |d|
47
+ results[source_index][:depends] << d.keep_if { |key| ['name','description'].include?(key) }
48
+ end
49
+ end
50
+ results.each do |r|
51
+ r[:depends].sort_by! { |h| h['name']}
52
+ end
53
+ puts results.to_yaml
54
+ end
15
55
  end
16
-
56
+
57
+ private
58
+ def check_for_file
59
+ unless Dir.entries(Dir.pwd).include?('Depends')
60
+ Depends::Log.error "Missing Depends file"
61
+ exit 1
62
+ end
63
+ end
64
+
65
+
66
+ def load_depends_file
67
+ @def = Depends::DSL::Depend.evaluate('Depends')
68
+ end
69
+
17
70
  end
18
71
  end
19
72
  end
@@ -1,51 +1,88 @@
1
1
  module Depends
2
2
  module Commands
3
- class Upload
3
+ class Upload < Depends::Commands::Base
4
4
 
5
+ class UploadConfig
6
+ extend(Mixlib::Config)
7
+ end
5
8
 
6
- def run(options)
7
- Depends::Config.load
8
- client = Depends::RestClient.new
9
- puts "CREATE: #{options.create}"
9
+ banner "Upload a dependency to a depends server"
10
10
 
11
- begin
12
- @dep = client.get_depend(options.dep)
13
- rescue Nestful::ResourceNotFound => e
14
- if options.create
15
- say("Creating dependency")
16
- @dep = client.create_depend(options.dep,options.description)
11
+ option :source,
12
+ :short => "-s source",
13
+ :long => "--source source",
14
+ :description => "Source directory for dependency",
15
+ :required => true
16
+ option :key,
17
+ :short => "-k key",
18
+ :long => "--key key",
19
+ :description => "The API Key to use for upload",
20
+ :required => true
17
21
 
18
- else
19
- color("Dependency does not exist and --create flag was not specified", :red)
20
- exit 1
21
- end
22
- end
22
+ option :description,
23
+ :short => "-e description",
24
+ :long => "--description description",
25
+ :required => false
23
26
 
24
- file = build_package(options)
25
- sha1 = Digest::SHA1.file(file).to_s
27
+ option :name,
28
+ :short => "-n name",
29
+ :long => "--name name",
30
+ :description => "Dependency Name",
31
+ :required => true
32
+
33
+ option :version,
34
+ :short => "-v version",
35
+ :long => "--version version",
36
+ :description => "Version to publish",
37
+ :required => true
38
+
39
+ option :destination,
40
+ :short => "-d destination",
41
+ :long => "--destination destination",
42
+ :description => "Destination to publish depend to",
43
+ :default => 'https://depends.io',
44
+ :proc => Proc.new { |o|
45
+ Depends::Util.depends_source o
46
+ }
26
47
 
27
- if @dep['versions'].select { |v| v.eql? options.num }.empty?
28
- puts "File #{file}"
29
- puts "SHA #{sha1}"
30
- puts "Number #{options.num}"
31
- begin
32
- client.create_version(@dep['name'], :file => file, :sha1 => sha1, :number => options.num)
33
- rescue Nestful::BadRequest => e
34
- color(e.response.body, :red)
48
+ option :log_level,
49
+ :short => "-l LEVEL",
50
+ :long => "--log_level LEVEL",
51
+ :description => "Set the log level (debug, info, warn, error, fatal)",
52
+ :proc => Proc.new { |l| l.downcase.to_sym }
53
+
54
+ def setup_application
55
+
56
+ end
57
+
58
+ def run_application
59
+ client = Depends::RestClient.new(config[:destination])
60
+ client.api_key = config[:key]
61
+
62
+ begin
63
+ Log.info "Getting Depend"
64
+ @dep = client.get_depend(config[:name])
65
+ rescue Nestful::ResourceNotFound => e
66
+ if config[:description].nil?
67
+ Log.fatal("Depends does not exist, you must specify a description")
68
+ exit(1)
35
69
  end
36
- else
37
- color("Dependency already exists!", :red)
70
+ Log.info "Creating Depends"
71
+ @dep = client.create_depend(config[:name],config[:description])
38
72
  end
73
+ file = build_package
74
+ sha1 = Digest::SHA1.file(file).to_s
75
+ client.create_version(config[:name], :file => file, :sha1 => sha1, :number => config[:version])
39
76
  end
40
77
 
41
78
  private
42
79
 
43
- def build_package(options)
80
+ def build_package
44
81
  upload_dir = File.join(Depends::Config.cache,'upload')
45
- FileUtils.mkdir_p upload_dir
46
- dest_file = File.join(upload_dir, "#{options.dep}-#{options.num}.zip")
47
- FileUtils.rm_f
48
- source_path = File.expand_path(options.source)
82
+ FileUtils.mkdir_p upload_dir unless File.exist? upload_dir
83
+ dest_file = File.join(upload_dir, "#{config[:name]}-#{config[:version]}.zip")
84
+ FileUtils.rm dest_file if File.exist? dest_file
85
+ source_path = File.expand_path(config[:source])
49
86
  Zip::ZipFile.open(dest_file, Zip::ZipFile::CREATE) { |zipfile|
50
87
  Dir["#{source_path}/**/*"].each do |file|
51
88
  relative_path = file.to_s.gsub(source_path, '')
@@ -2,16 +2,6 @@ module Depends
2
2
  class Config
3
3
  extend(Mixlib::Config)
4
4
 
5
- cache File.expand_path('~/.depends')
6
- api_key ''
7
- server 'https://depends.aws.af.cm'
8
-
9
- def self.load(file = '~/.depends/config.rb')
10
- config_file = File.expand_path(file)
11
- Depends::Config.from_file(config_file)
12
- rescue
13
- color("Failed to load config file, please run 'depend config'", :red)
14
- exit(1)
15
- end
16
- end
17
- end
5
+ cache File.expand_path('~/.depends_cache')
6
+ end
7
+ end
@@ -5,6 +5,7 @@ module Depends
5
5
  attr_reader :sources
6
6
  attr_reader :dependencies
7
7
  attr_reader :unmet_dependencies
8
+ attr_reader :default_source
8
9
 
9
10
  def initialize(sources,dependencies, options ={})
10
11
  @sources = sources
@@ -14,6 +15,7 @@ module Depends
14
15
  def map(deps)
15
16
  @dependencies = []
16
17
  @unmet_dependencies = []
18
+ Log.debug " :definition => #{@def.inspect}"
17
19
  deps.each do |dep|
18
20
  dependency_met = false
19
21
  sources.each do |source|
@@ -22,10 +24,11 @@ module Depends
22
24
  server_dep[:source] = source
23
25
  server_dep[:destination] = dep[:destination]
24
26
  server_dep[:name] = dep[:name]
27
+ Log.debug ":server_dep => #{server_dep}"
25
28
  @dependencies << server_dep
26
29
  dependency_met = true
27
30
  rescue Nestful::ResourceNotFound => e
28
-
31
+ Log.debug ":resource_not_found => #{e.inspect}"
29
32
  end
30
33
  end
31
34
 
@@ -13,7 +13,7 @@ module Depends
13
13
  end
14
14
 
15
15
  def initialize
16
- @sources = [Depends::RestClient.new]
16
+ @sources = []
17
17
  @dependencies = []
18
18
  end
19
19
 
@@ -33,22 +33,26 @@ module Depends
33
33
  end
34
34
 
35
35
  def source(source, options = {})
36
- color("source is a depreciated dsl option", :yellow)
36
+ depends_source Depends::Util.depends_source(source)
37
37
  end
38
38
 
39
- def key(*args)
40
- color("key is a depreciated dsl option", :yellow)
39
+ def default
40
+ @default ||= @sources.last
41
+ end
42
+
43
+ def key(api_key)
44
+ @sources.last.api_key = api_key
41
45
  end
42
46
 
43
47
  def to_definition
44
48
  @sources.uniq!
45
- raise DslError, "No source specified! Try source :bigdepends" unless @sources.length > 0
49
+ raise DslError, "No source specified! Try source :depends" unless @sources.length > 0
46
50
  Depends::Definition.new(@sources, @dependencies)
47
51
  end
48
52
 
49
53
  private
50
54
  def depends_source(source)
51
-
55
+ @sources << Depends::RestClient.new(source)
52
56
  end
53
57
 
54
58
  end
@@ -0,0 +1,6 @@
1
+ module Depends
2
+ class Log
3
+ extend Mixlib::Log
4
+ end
5
+ end
6
+
@@ -0,0 +1,41 @@
1
+ require 'logger'
2
+ require 'time'
3
+
4
+ module Depends
5
+ class Log
6
+ class Formatter < Logger::Formatter
7
+ @@show_time = false
8
+
9
+ COLOR_MAP = {'DEBUG' =>'0;37', 'INFO'=>'32', 'WARN'=>'33', 'ERROR'=>'31', 'FATAL'=>'31', 'UNKNOWN'=>'37'}
10
+
11
+ def self.show_time=(show=false)
12
+ @@show_time = show
13
+ end
14
+
15
+ def call(severity, time, progname, msg)
16
+ color = COLOR_MAP[severity]
17
+
18
+ if @@show_time
19
+ sprintf("\033[0;37m%s \033[0m[\033[#{color}m%s\033[0m]: \033[0m%s\n", time.rfc2822(), severity, msg2str(msg))
20
+ else
21
+ sprintf("\033[#{color}m%s\033[0;37m: \033[0m%s\n", severity, msg2str(msg))
22
+ end
23
+ end
24
+
25
+ # Converts some argument to a Logger.severity() call to a string. Regular strings pass through like
26
+ # normal, Exceptions get formatted as "message (class)\nbacktrace", and other random stuff gets
27
+ # put through "object.inspect"
28
+ def msg2str(msg)
29
+ case msg
30
+ when ::String
31
+ msg
32
+ when ::Exception
33
+ "#{ msg.message } (#{ msg.class })\n" <<
34
+ (msg.backtrace || []).join("\n")
35
+ else
36
+ msg.inspect
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -5,16 +5,18 @@ module Depends
5
5
  class RestClient
6
6
 
7
7
  attr_accessor :source_url
8
+ attr_accessor :api_key
8
9
  attr_reader :cache
9
10
 
10
- def initialize
11
- @source_url = Depends::Config.server
12
- cache_path = File.join(Depends::Config.cache,'rest',URI.parse(source_url.to_s).host )
11
+ def initialize(source)
12
+ @source_url = source
13
+ cache_path = File.join(Depends::Config.cache,'rest',URI.parse(source.to_s).host )
14
+ Depends::Log.debug ":cache_path => #{cache_path}"
13
15
  @cache = ActiveSupport::Cache::FileStore.new(cache_path, :expires_in => 1.day)
14
16
  end
15
17
 
16
18
  def headers
17
- {'key' => Depends::Config.api_key}
19
+ {'key' => api_key}
18
20
  end
19
21
 
20
22
  def create_version(name,options = {})
@@ -28,13 +30,22 @@ module Depends
28
30
 
29
31
  def get_depend(name)
30
32
  uri = "#{source_url}/depends/#{name}"
31
- depend = Nestful.get uri, :format => :json, :headers => headers
33
+ #depend = cache.read(uri)
34
+ #if depend.nil?
35
+ depend = Nestful.get uri, :format => :json, :headers => headers
36
+ #cache.write(uri,depend.to_json)
37
+ #else
38
+ # depend = ::MultiJson.load(depend)
39
+ #end
32
40
  depend
33
41
  end
34
42
 
35
43
  def download_depend_version(name,version)
36
44
  dest_file = File.join(Depends::Config.cache, "#{name}-#{version}.zip")
37
- uri = get_downlad_uri(name,version)
45
+ Log.info "#{source_url}/depends/#{name}/version/#{version}/download"
46
+
47
+ request = Nestful.get "#{source_url}/depends/#{name}/version/#{version}/download.url", :headers => headers
48
+ uri = URI.parse(request)
38
49
  http = Net::HTTP.new(uri.host, uri.port)
39
50
  http.use_ssl = true
40
51
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
@@ -51,13 +62,13 @@ module Depends
51
62
  size += chunk.size
52
63
  new_progress = (size * 100) / total
53
64
  unless new_progress == progress
54
- say "\rDownloading %s (%3d%%) " % [name, new_progress]
65
+ Log.info "\rDownloading %s (%3d%%) " % [name, new_progress]
55
66
  end
56
67
  progress = new_progress
57
68
  end
58
69
 
59
70
  temp_file.close
60
- FileUtils.rm_f dest_file
71
+ File.unlink dest_file if File.exists?(dest_file)
61
72
  FileUtils.mkdir_p File.dirname(dest_file)
62
73
  FileUtils.mv temp_file.path, dest_file, :force => true
63
74
  end
@@ -82,16 +93,18 @@ module Depends
82
93
 
83
94
 
84
95
  def get_dep_version(name,version)
96
+ Depends::Log.debug "[get] :ver => #{version}"
85
97
  uri = "#{source_url}/depends/#{name}/version/#{version}"
86
- depend = Nestful.get uri, :format => :json, :headers => headers
98
+ #depend = cache.read(uri)
99
+ #if depend.nil?
100
+ depend = Nestful.get uri, :format => :json, :headers => headers
101
+ #cache.write(uri,depend.to_json)
102
+ #else
103
+ # depend = ::MultiJson.load(depend)
104
+ #end
87
105
  depend
88
106
  end
89
107
 
90
- private
91
- def get_downlad_uri(name,version)
92
- request = Nestful.get "#{source_url}/depends/#{name}/version/#{version}/download.url", :headers => headers
93
- uri = URI.parse(request)
94
- end
95
108
 
96
109
  end
97
110
  end
File without changes
@@ -5,12 +5,14 @@ module Depends
5
5
 
6
6
  def self.un_zip(source,destination, options = {})
7
7
  options.reverse_merge!({:overwrite => true})
8
- say "Opening #{source}"
8
+ Log.debug "Opening #{source}"
9
9
  Zip::ZipFile.open(source) do |zip|
10
10
  zip.each do |entry|
11
+ Log.debug (":entry => #{entry.name}")
11
12
  path = ::File.join(destination, entry.name)
12
13
  FileUtils.mkdir_p(::File.dirname(path))
13
14
  if options[:overwrite] && ::File.exists?(path) && !::File.directory?(path)
15
+ Log.debug("Removing #{path}")
14
16
  FileUtils.rm(path)
15
17
  end
16
18
  zip.extract(entry, path)
@@ -25,14 +27,10 @@ module Depends
25
27
  when :local
26
28
  "http://localhost:8080"
27
29
  when :depends
28
- "http://depends.io"
30
+ "https://depends.cloudfoundry.com/"
29
31
  else
30
32
  source
31
33
  end
32
34
  end
33
-
34
- def self.depend_name_with_version(dep)
35
- "#{dep[:name]}-#{dep['number']}"
36
- end
37
35
  end
38
36
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: depends-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0.beta3
5
- prerelease: 6
4
+ version: 0.2.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Chris Roby
@@ -10,16 +10,16 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-01-09 00:00:00.000000000 Z
13
+ date: 2012-07-19 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: nestful
16
+ name: mixlib-log
17
17
  requirement: !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 0.0.8
22
+ version: 1.3.0
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -27,15 +27,15 @@ dependencies:
27
27
  requirements:
28
28
  - - ~>
29
29
  - !ruby/object:Gem::Version
30
- version: 0.0.8
30
+ version: 1.3.0
31
31
  - !ruby/object:Gem::Dependency
32
- name: rubyzip
32
+ name: nestful
33
33
  requirement: !ruby/object:Gem::Requirement
34
34
  none: false
35
35
  requirements:
36
36
  - - ~>
37
37
  - !ruby/object:Gem::Version
38
- version: 0.9.7
38
+ version: 0.0.8
39
39
  type: :runtime
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
@@ -43,15 +43,15 @@ dependencies:
43
43
  requirements:
44
44
  - - ~>
45
45
  - !ruby/object:Gem::Version
46
- version: 0.9.7
46
+ version: 0.0.8
47
47
  - !ruby/object:Gem::Dependency
48
- name: activesupport
48
+ name: mixlib-config
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 3.2.3
54
+ version: 1.1.2
55
55
  type: :runtime
56
56
  prerelease: false
57
57
  version_requirements: !ruby/object:Gem::Requirement
@@ -59,15 +59,15 @@ dependencies:
59
59
  requirements:
60
60
  - - ~>
61
61
  - !ruby/object:Gem::Version
62
- version: 3.2.3
62
+ version: 1.1.2
63
63
  - !ruby/object:Gem::Dependency
64
- name: rack-cache
64
+ name: rubyzip
65
65
  requirement: !ruby/object:Gem::Requirement
66
66
  none: false
67
67
  requirements:
68
68
  - - ~>
69
69
  - !ruby/object:Gem::Version
70
- version: '1.2'
70
+ version: 0.9.7
71
71
  type: :runtime
72
72
  prerelease: false
73
73
  version_requirements: !ruby/object:Gem::Requirement
@@ -75,15 +75,15 @@ dependencies:
75
75
  requirements:
76
76
  - - ~>
77
77
  - !ruby/object:Gem::Version
78
- version: '1.2'
78
+ version: 0.9.7
79
79
  - !ruby/object:Gem::Dependency
80
- name: multi_json
80
+ name: mixlib-cli
81
81
  requirement: !ruby/object:Gem::Requirement
82
82
  none: false
83
83
  requirements:
84
84
  - - ~>
85
85
  - !ruby/object:Gem::Version
86
- version: 1.3.2
86
+ version: 1.2.2
87
87
  type: :runtime
88
88
  prerelease: false
89
89
  version_requirements: !ruby/object:Gem::Requirement
@@ -91,15 +91,15 @@ dependencies:
91
91
  requirements:
92
92
  - - ~>
93
93
  - !ruby/object:Gem::Version
94
- version: 1.3.2
94
+ version: 1.2.2
95
95
  - !ruby/object:Gem::Dependency
96
- name: commander
96
+ name: activesupport
97
97
  requirement: !ruby/object:Gem::Requirement
98
98
  none: false
99
99
  requirements:
100
100
  - - ~>
101
101
  - !ruby/object:Gem::Version
102
- version: 4.1.2
102
+ version: 3.2.3
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
@@ -107,59 +107,62 @@ dependencies:
107
107
  requirements:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
- version: 4.1.2
110
+ version: 3.2.3
111
111
  - !ruby/object:Gem::Dependency
112
- name: mixlib-config
112
+ name: rack-cache
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  none: false
115
115
  requirements:
116
- - - ! '>='
116
+ - - ~>
117
117
  - !ruby/object:Gem::Version
118
- version: '0'
118
+ version: '1.2'
119
119
  type: :runtime
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  none: false
123
123
  requirements:
124
- - - ! '>='
124
+ - - ~>
125
125
  - !ruby/object:Gem::Version
126
- version: '0'
126
+ version: '1.2'
127
127
  - !ruby/object:Gem::Dependency
128
- name: terminal-table
128
+ name: multi_json
129
129
  requirement: !ruby/object:Gem::Requirement
130
130
  none: false
131
131
  requirements:
132
- - - ! '>='
132
+ - - ~>
133
133
  - !ruby/object:Gem::Version
134
- version: '0'
134
+ version: 1.3.2
135
135
  type: :runtime
136
136
  prerelease: false
137
137
  version_requirements: !ruby/object:Gem::Requirement
138
138
  none: false
139
139
  requirements:
140
- - - ! '>='
140
+ - - ~>
141
141
  - !ruby/object:Gem::Version
142
- version: '0'
142
+ version: 1.3.2
143
143
  description:
144
144
  email:
145
145
  - croby@biaprotect.com
146
146
  - pmorton@biaprotect.com
147
147
  executables:
148
- - depend
148
+ - depends
149
149
  extensions: []
150
150
  extra_rdoc_files: []
151
151
  files:
152
- - bin/depend
153
- - lib/depends/cli.rb
152
+ - bin/depends
153
+ - lib/depends/command_factory.rb
154
+ - lib/depends/commands/base.rb
154
155
  - lib/depends/commands/install.rb
155
156
  - lib/depends/commands/list.rb
156
157
  - lib/depends/commands/upload.rb
157
- - lib/depends/commands/versions.rb
158
158
  - lib/depends/config.rb
159
159
  - lib/depends/definition.rb
160
160
  - lib/depends/dsl/depend.rb
161
161
  - lib/depends/exceptions.rb
162
+ - lib/depends/log/formatter.rb
163
+ - lib/depends/log.rb
162
164
  - lib/depends/rest_client.rb
165
+ - lib/depends/server.rb
163
166
  - lib/depends/util.rb
164
167
  - lib/depends.rb
165
168
  - LICENSE
@@ -179,9 +182,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
179
182
  required_rubygems_version: !ruby/object:Gem::Requirement
180
183
  none: false
181
184
  requirements:
182
- - - ! '>'
185
+ - - ! '>='
183
186
  - !ruby/object:Gem::Version
184
- version: 1.3.1
187
+ version: '0'
185
188
  requirements: []
186
189
  rubyforge_project:
187
190
  rubygems_version: 1.8.24
data/bin/depend DELETED
@@ -1,6 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'depends'
4
- require 'depends/cli'
5
-
6
-
@@ -1,83 +0,0 @@
1
- require 'commander/import'
2
-
3
- # :name is optional, otherwise uses the basename of this executable
4
- program :name, 'depends'
5
- program :version, '0.2.0'
6
- program :description, 'Simple binary dependency management '
7
-
8
- command :install do |c|
9
- c.syntax = 'install'
10
- c.description = 'Install application dependencies'
11
- c.action do |args,options|
12
- Depends::Commands::Install.new.run
13
- end
14
- end
15
-
16
-
17
- command :list do |c|
18
- c.syntax = 'list'
19
- c.description = 'List application dependencies'
20
- c.action do |args,options|
21
- Depends::Commands::List.new.run
22
- end
23
- end
24
-
25
- command :versions do |c|
26
- c.syntax = 'versions'
27
- c.description = 'List version if an application'
28
- c.action do |args,options|
29
- Depends::Commands::Versions.new.run(args)
30
- end
31
- end
32
-
33
-
34
- command :upload do |c|
35
- c.syntax = 'upload'
36
- c.description = 'Upload a dependency to the server'
37
- c.option '--source DIR', String, 'Directory to be uploaded'
38
- c.option '--name NAME', String, 'Name of the dependency'
39
- c.option '--num VERSION', String, 'Version String'
40
- c.option '--create','Create if does not exist'
41
- c.option '--description', String, 'Description of the dependency'
42
- c.action do |args,options|
43
-
44
- options.source = ask("Source Directory: ") unless options.source
45
- options.name = ask("Dependency Name: ") unless options.dep
46
- options.num = ask("Version Number: ") unless options.num
47
- options.description = ask("Description:") if not options.description and options.create
48
-
49
- Depends::Commands::Upload.new.run(options)
50
- end
51
- end
52
-
53
- command :config do |c|
54
- c.syntax = 'config'
55
- c.description = 'Configure the depends client'
56
- c.option '--key KEY', String, 'The key to use to access the depends server'
57
- c.option '--server SERVER', String, 'The URL of the depends server'
58
- c.option '--cache CACHE', String, 'The path to the folder to use for caching dependencies'
59
- c.option '--overwrite','Overwrite an existing config file'
60
-
61
- c.action do |args,options|
62
- config_file = File.expand_path( '~/.depends/config.rb' )
63
- config_dir = File.dirname(config_file)
64
-
65
- if File.exists? config_file and not options.overwrite
66
- say("Your configuration already exists, please specify --overwrite if you wish to overwrite the existing config")
67
- exit(1)
68
- end
69
-
70
- options.key = ask("Depends server key ") unless options.key
71
-
72
- config_content = ''
73
- config_content << "api_key '#{options.key}'"
74
- config_content << "server '#{options.server}" if options.server
75
- config_content << "cache '#{options.cache}'" if options.cache
76
-
77
- Dir.mkdir config_dir unless File.directory? config_dir
78
-
79
- file = File.new(config_file,'w+')
80
- file.write(config_content)
81
-
82
- end
83
- end
@@ -1,19 +0,0 @@
1
-
2
- module Depends
3
- module Commands
4
- class Versions
5
-
6
- def run(depend)
7
- Depends::Config.load
8
- client = Depends::RestClient.new()
9
- dep = client.get_depend(depend[0])
10
-
11
- headers = ['Version Number','SHA1', 'Publisher Address']
12
- rows = dep['versions'].collect{ |i| [i['number'] ,i['sha1'],i['publisher']] }
13
- table = Terminal::Table.new :title => "Versions for #{depend[0]}", :headings => headers, :rows => rows
14
- puts table
15
- end
16
-
17
- end
18
- end
19
- end