right_publish 0.4.0 → 0.4.2
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/lib/right_publish/repo.rb +2 -4
- data/lib/right_publish/repos/apt.rb +8 -7
- data/lib/right_publish/repos/msi.rb +0 -1
- data/lib/right_publish/storage.rb +3 -1
- data/lib/right_publish/stores/local.rb +37 -1
- data/right_publish.gemspec +1 -1
- data/spec/repos/apt_spec.rb +9 -6
- metadata +4 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.2
|
data/lib/right_publish/repo.rb
CHANGED
@@ -70,15 +70,13 @@ module RightPublish
|
|
70
70
|
# @option options [String] :subdir a subdirectory (common prefix); only files matching this prefix will be included
|
71
71
|
# @option options [Array] :filter a whitelist of String glob patterns to filter files, i.e. ["*.rpm", "*.deb"]
|
72
72
|
def annotate(options={})
|
73
|
+
Profile.log("Creating HTML directory listing for #{repo_human_name(@repository_type)} files...")
|
73
74
|
|
74
75
|
options[:subdir] ||= repo_config[:subdir]
|
75
|
-
storage_type = options[:use_remote_storage] ? :remote_storage : :local_storage
|
76
|
-
|
77
|
-
Profile.log("Creating HTML directory listing from #{storage_type.to_s} storage for #{repo_human_name(@repository_type)} files...")
|
78
76
|
|
79
77
|
files = []
|
80
78
|
RightPublish::Storage.ls(
|
81
|
-
get_storage(Profile.config[
|
79
|
+
get_storage(Profile.config[:local_storage][:provider]),
|
82
80
|
:subdir => options[:subdir]) do |file|
|
83
81
|
files << file
|
84
82
|
end
|
@@ -6,10 +6,10 @@ module RightPublish
|
|
6
6
|
REPO_KEY = :apt_repo
|
7
7
|
|
8
8
|
REPO_OPTIONS = {
|
9
|
-
:dists => :addr_optional,
|
10
|
-
:description => DEFAULT_DESCRIPTION,
|
11
|
-
:auto => DEFAULT_APT_AUTO,
|
12
|
-
:subdir => DEFAULT_APT_DIR,
|
9
|
+
:dists => :addr_optional,
|
10
|
+
:description => DEFAULT_DESCRIPTION,
|
11
|
+
:auto => DEFAULT_APT_AUTO,
|
12
|
+
:subdir => DEFAULT_APT_DIR,
|
13
13
|
:gpg_key_id => :attr_optional,
|
14
14
|
:gpg_password => :attr_optional }
|
15
15
|
|
@@ -97,14 +97,15 @@ module RightPublish
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def auto_repo_remove(repo_path, pkg, target)
|
100
|
-
sub_command = (pkg.end_with?(BIN_EXTENSION) && 'remove') || 'removesrc'
|
101
100
|
pkg_name = AptRepo.pkg_parts(pkg)[:name]
|
102
|
-
|
101
|
+
filterlist = "'$PackageType (== #{ (pkg.end_with?(BIN_EXTENSION) && 'deb') || 'dsc' }), Package (% #{pkg_name})'"
|
102
|
+
|
103
|
+
Profile.log("Removing any packages files using filterlist #{filterlist}")
|
103
104
|
|
104
105
|
targets = (target && Array(target)) || repo_config[:dists]
|
105
106
|
targets.each do |t|
|
106
107
|
ask_passphrase = (repo_config[:gpg_key_id]) ? "--ask-passphrase" : ""
|
107
|
-
cmd = "reprepro #{ask_passphrase} -b #{repo_path}
|
108
|
+
cmd = "reprepro #{ask_passphrase} -b #{repo_path} removefilter #{t} #{filterlist}"
|
108
109
|
if repo_config[:gpg_key_id]
|
109
110
|
exited = shellout_with_password(cmd)
|
110
111
|
else
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'right_publish/profile'
|
2
|
+
require 'stringio'
|
2
3
|
|
3
4
|
module RightPublish
|
4
5
|
class StorageManager
|
@@ -65,7 +66,8 @@ module RightPublish
|
|
65
66
|
else
|
66
67
|
remote_file = files.shift
|
67
68
|
Profile.log("Synchronizing: #{remote_file.first}", :debug)
|
68
|
-
|
69
|
+
# Need to wrap the raw data in a stringio object or the call will fail on windows
|
70
|
+
local_copy = dest_dir.files.create(:key=>remote_file.first, :body=>StringIO.new(remote_file.last.body),
|
69
71
|
:acl=>'public-read',
|
70
72
|
:content_type => guess_mime_type(remote_file.first))
|
71
73
|
end
|
@@ -1,5 +1,41 @@
|
|
1
|
-
require 'fog'
|
2
1
|
require 'digest/md5'
|
2
|
+
require 'fog'
|
3
|
+
# Fog loads these on demand. Preload this so we can monkey patch it below
|
4
|
+
require 'fog/local/models/storage/files'
|
5
|
+
|
6
|
+
module Fog
|
7
|
+
module Storage
|
8
|
+
class Local
|
9
|
+
class Files < Fog::Collection
|
10
|
+
# This method is exactly like the stock one except for using "rb" (force binary mode)
|
11
|
+
# instead of "r" for reading the file. On windows it defaults to text mode which
|
12
|
+
# messes everything up.
|
13
|
+
def get(key, &block)
|
14
|
+
requires :directory
|
15
|
+
path = file_path(key)
|
16
|
+
if ::File.exists?(path)
|
17
|
+
data = {
|
18
|
+
:content_length => ::File.size(path),
|
19
|
+
:key => key,
|
20
|
+
:last_modified => ::File.mtime(path)
|
21
|
+
}
|
22
|
+
if block_given?
|
23
|
+
file = ::File.open(path, "rb")
|
24
|
+
while (chunk = file.read(Excon::CHUNK_SIZE)) && yield(chunk); end
|
25
|
+
file.close
|
26
|
+
new(data)
|
27
|
+
else
|
28
|
+
body = ::File.open(path,"rb") { |io| io.read }
|
29
|
+
new(data.merge!(:body => body))
|
30
|
+
end
|
31
|
+
else
|
32
|
+
nil
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
3
39
|
|
4
40
|
module RightPublish
|
5
41
|
module LocalStorage
|
data/right_publish.gemspec
CHANGED
data/spec/repos/apt_spec.rb
CHANGED
@@ -37,7 +37,7 @@ describe RightPublish::AptRepo do
|
|
37
37
|
expected_dists.each do |dist|
|
38
38
|
@remove_expectations[dist] ||= []
|
39
39
|
@remove_expectations[dist] << RightPublish::AptRepo.pkg_parts(pkg)[:name]
|
40
|
-
|
40
|
+
|
41
41
|
@install_expectations[dist] ||= []
|
42
42
|
@install_expectations[dist] << pkg
|
43
43
|
end
|
@@ -47,13 +47,16 @@ describe RightPublish::AptRepo do
|
|
47
47
|
|
48
48
|
system_calls = (pkgs.size * expected_dists.size) * 2
|
49
49
|
@repo.should_receive(@system_func).times(system_calls).and_return do |cmd|
|
50
|
-
path, subcmd, distro, pkg = /reprepro\s+(?:--ask-passphrase )?(?:-C main )?-b\s+(.+)\s+(includedeb|includedsc|
|
50
|
+
path, subcmd, distro, pkg = /reprepro\s+(?:--ask-passphrase )?(?:-C main )?-b\s+(.+)\s+(includedeb|includedsc|removefilter)\s+([^\s]+)\s+(.+)$/.match(cmd).captures
|
51
51
|
path.should be_eql(File.join(@cache_dir,@repo_subdir))
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
# Now we are using listfilter, that is why our package name is really filter.
|
53
|
+
# reprepro -b somedir/fake/ removefilter quantal '$PackageType (== deb), Package (% foo)'
|
54
|
+
# We need to extract package name from '$PackageType (== deb), Package (% foo)'
|
55
|
+
real_pkg = pkg[35..-3] # 35 is an index of space after '%', and -3 is a index of ')'
|
56
|
+
if @remove_expectations.has_key?(distro) && @remove_expectations[distro].include?(real_pkg)
|
57
|
+
subcmd.should == 'removefilter'
|
55
58
|
@remove_expectations.should be_has_key(distro)
|
56
|
-
@remove_expectations[distro].delete(
|
59
|
+
@remove_expectations[distro].delete(real_pkg)
|
57
60
|
@remove_expectations.delete(distro) if @remove_expectations[distro].empty?
|
58
61
|
else
|
59
62
|
subcmd.should be_eql((pkg.end_with?(RightPublish::AptRepo::SRC_EXTENSION) && 'includedsc') || 'includedeb')
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: right_publish
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 11
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
|
-
-
|
10
|
-
version: 0.4.
|
9
|
+
- 2
|
10
|
+
version: 0.4.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Brian Szmyd
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2013-11-
|
19
|
+
date: 2013-11-18 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|