nix 0.0.3 → 0.1

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.
@@ -31,23 +31,12 @@ class Gem::Specification
31
31
  def nix_meta
32
32
  {
33
33
  :homepage => homepage,
34
- :description => nix_description(false),
35
- :longDescription => nix_description(true),
34
+ :description => summary,
35
+ :longDescription => description,
36
36
  :license => licenses
37
37
  }.reject { |k, v| v.nil? or (v.respond_to?(:empty?) and v.empty?) }
38
38
  end
39
39
 
40
- def nix_description(long)
41
- return nil if description.nil? or description.empty?
42
- desc = description.dup
43
- if not long then
44
- desc.sub!(/\A[[:space:]]*([^.\n]*[^.\n[:space:]]).*\z/,'\1')
45
- desc.sub!(/ +/, ' ')
46
- desc.sub!(/(.{120}).+/, '\1[...]') # Trim to 120 chars
47
- end
48
- desc
49
- end
50
-
51
40
  def src_url
52
41
  "http://production.cf.rubygems.org/gems/#{full_name}.gem"
53
42
  end
@@ -89,18 +78,29 @@ class Gem::Specification
89
78
  end
90
79
 
91
80
  class Gem::Commands::NixCommand < Gem::Command
92
- include Gem::VersionOption
93
- include Gem::LocalRemoteOptions
94
- include Gem::InstallUpdateOptions
95
-
96
81
  def exec
97
82
  begin
98
83
  @prerelease = false;
99
84
 
100
85
  args = options[:args];
101
86
 
87
+ if FileTest.exists?(options[:nix_file])
88
+ raise "File #{options[:nix_file]} is not a regular file" unless FileTest.file?(options[:nix_file])
89
+ File.open(options[:nix_file], 'r') do |f|
90
+ l = f.readlines.select {|s| s =~ /gem_nix_args =/}.first
91
+ args += l.
92
+ sub(/ *gem_nix_args = \[ (.*) \];/, '\1').split(' ').
93
+ map do |s|
94
+ s.sub(/\A''/, '').sub(/''\Z/, '')
95
+ end
96
+ end unless options[:ignore_existing]
97
+ end
98
+
99
+ args.sort!
100
+
101
+ say "Will generate nix file for the following gems: #{args.join ', '}" if Gem::configuration.really_verbose
102
+
102
103
  @gems_with_deps = {}
103
- @seen = {}
104
104
 
105
105
  # args to dep informations
106
106
  args.each { |arg|
@@ -116,11 +116,6 @@ class Gem::Commands::NixCommand < Gem::Command
116
116
 
117
117
  say " total: #{@gems_with_deps.length}" if Gem.configuration.really_verbose
118
118
 
119
- print <<-EOF
120
- # WARNING: automatically generated file
121
- # the gem nix command comes from 'nix' gem
122
- g: # Get dependencies from patched gems
123
- EOF
124
119
  # define aliases
125
120
  aliases = {}
126
121
  output_gems = {}
@@ -135,14 +130,19 @@ g: # Get dependencies from patched gems
135
130
  })
136
131
  end
137
132
 
138
- print ({
139
- :gem_nix_args => args,
140
- :gems => output_gems,
141
- :aliases => aliases.values.inject({}) do |h, s|
142
- h[s.nix_name(:short_sym)] = s.nix_name(:rhs_sym)
143
- h
144
- end
145
- }.to_nix)
133
+ File.open(options[:nix_file], 'w') do |f|
134
+ f << "# WARNING: automatically generated file\n"
135
+ f << "# Generated by 'gem nix' command that comes from 'nix' gem\n"
136
+ f << "g: # Get dependencies from patched gems\n"
137
+ f << ({
138
+ :gem_nix_args => args,
139
+ :gems => output_gems,
140
+ :aliases => aliases.values.inject({}) do |h, s|
141
+ h[s.nix_name(:short_sym)] = s.nix_name(:rhs_sym)
142
+ h
143
+ end
144
+ }.to_nix) << "\n"
145
+ end
146
146
  exit_code = 0
147
147
 
148
148
  rescue => e
@@ -155,15 +155,14 @@ g: # Get dependencies from patched gems
155
155
 
156
156
  def adddep(dep)
157
157
  say "adding dep #{dep.name}." if Gem.configuration.really_verbose
158
- gem = find_gem_with_source(dep)
159
- raise Gem::CommandLineError, "couldn't find #{dep}" if gem.nil?
160
- full_name = gem[0].full_name
158
+ spec, source_uri = find_gem_with_source(dep)
159
+ full_name = spec.full_name
161
160
 
162
- return if @seen[full_name]
163
- @seen[full_name] = true # there maybe circular dependencies. thus mark this gem seen as early as possible
161
+ return if @gems_with_deps.key?(full_name)
162
+ @gems_with_deps[full_name] = nil # there maybe circular dependencies. thus mark this gem seen as early as possible
164
163
 
165
164
  # development deps can't be found. Some are old. Thus only add rutime dependencies
166
- deps = gem[0].dependencies.find_all { |d| d.type == :runtime }
165
+ deps = spec.dependencies.find_all { |d| d.type == :runtime }
167
166
 
168
167
  say " total deps of #{full_name}: #{deps.length}" if Gem.configuration.really_verbose
169
168
 
@@ -171,11 +170,9 @@ g: # Get dependencies from patched gems
171
170
  dep_specs = deps.map { |dep| adddep(dep) }
172
171
 
173
172
  @gems_with_deps[full_name] = [
174
- gem[0], # spec
175
- gem[1], # src
176
- dep_specs # deps
173
+ spec, source_uri, dep_specs
177
174
  ]
178
- gem[0] # only return spec, no source for dep list
175
+ spec # only return spec, no source for dep list
179
176
  end
180
177
 
181
178
 
@@ -199,6 +196,8 @@ g: # Get dependencies from patched gems
199
196
  dep.match?(dep.name, version)
200
197
  end
201
198
 
199
+ raise Gem::CommandLineError, "couldn't find #{dep}" if found.empty?
200
+
202
201
  latest = found.sort { |a, b| a.first <=> b.first }.last
203
202
  [Gem::SpecFetcher.fetcher.fetch_spec([dep.name, latest.first, latest[1]], latest.last), latest.last.to_s]
204
203
  end
@@ -1,3 +1,3 @@
1
1
  module Nix
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1"
3
3
  end
@@ -3,8 +3,19 @@ require 'rubygems/dependency_installer'
3
3
 
4
4
  class Gem::Commands::NixCommand < Gem::Command
5
5
  def initialize
6
- defaults = Gem::DependencyInstaller::DEFAULT_OPTIONS.merge({ })
6
+ defaults = Gem::DependencyInstaller::DEFAULT_OPTIONS.merge({
7
+ :nix_file => ENV.fetch('NIXPKGS_ALL', '/etc/nixos/nixpkgs') + '/pkgs/development/interpreters/ruby/gems-generated.nix',
8
+ :ignore_existing => false
9
+ })
7
10
  super 'nix', 'Create a nix file containing expressions of the gems', defaults
11
+
12
+ add_option('--nix-file=/path/to/gems-generated.nix', 'Use specified nix file instead of default one') do |value, options|
13
+ options[:nix_file] = value
14
+ end
15
+
16
+ add_option('--[no-]ignore-existing', 'Ignore gems from the previous run') do |value, options|
17
+ options[:ignore_existing] = value
18
+ end
8
19
  end
9
20
 
10
21
  def description # :nodoc:
@@ -31,7 +42,7 @@ class Gem::Commands::NixCommand < Gem::Command
31
42
 
32
43
  def execute
33
44
  require 'nix/gem-nix-command' unless respond_to? :exec
34
- exec
45
+ exec
35
46
  end
36
47
  end
37
48
 
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
10
10
  s.email = ["urkud@ya.ru"]
11
11
  s.homepage = "http://gitorious.org/ruby-nix"
12
12
  s.summary = %q{Nix package manager interface}
13
- s.description = %q{See http://www.nixos.org}
13
+ s.description = %q{Adds 'gem nix' command that dumps given set of gems to format suitable for Nix package manager}
14
14
 
15
15
  s.files = `git ls-files`.split("\n")
16
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nix
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 9
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 0
9
- - 3
10
- version: 0.0.3
8
+ - 1
9
+ version: "0.1"
11
10
  platform: ruby
12
11
  authors:
13
12
  - Yury G. Kudryashov
@@ -19,7 +18,7 @@ date: 2011-01-18 00:00:00 +03:00
19
18
  default_executable:
20
19
  dependencies: []
21
20
 
22
- description: See http://www.nixos.org
21
+ description: Adds 'gem nix' command that dumps given set of gems to format suitable for Nix package manager
23
22
  email:
24
23
  - urkud@ya.ru
25
24
  executables: []