aptly-api 0.8.2 → 0.9.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a820f41426fba78e2df8de2eb2473853b9cf3d05
4
- data.tar.gz: ae8062079c4393b311719405afc85b8753591579
2
+ SHA256:
3
+ metadata.gz: 2f05bd8ea6f8823c9ecbdd75ece3fd75fea137e1c7feaf3ee9be7bacbc746fa6
4
+ data.tar.gz: 80e7d9229aa43d4d39a2d563a3570623a9beae956fc9add43ea53cb6dd985a02
5
5
  SHA512:
6
- metadata.gz: 785d302d050691514f11fa1bc5c73e23f6f105aef27af492557ee2e888ea98f9469f91be159f64b91ac8b10dde5be97e33101b8e9dc77f1480e775930a29a7a8
7
- data.tar.gz: 67229cb608abbf58f090024cec0bd16a654fcc90a63800b57a2267b07d3325cfb763e72870f1f74bec317b198aafbf645eedc70bc6dd63f59ac5829ea9ee78db
6
+ metadata.gz: ea9a99200d5c2a5c76c60013b2a90c695674bc31c9d63ea1cb5fd13912edcf5aa0696b79a9fe84289b93ddb46a170859108ba5e8b8c7fc1190ef99bb612b1126
7
+ data.tar.gz: 5f9731ea0d96ea4dbd0723598500f9e6ce6707ef30fd675e3cc1aad65542d7e8747fdb9b0b78361c35a636b52ecc4079351857595177f80c19911f1a68a4f32f
@@ -1,5 +1,19 @@
1
1
  # Change Log
2
2
 
3
+ ## [0.9.0]
4
+ ### Added
5
+ - `Files.tmp_upload` is a new convenience wrapper around `#upload` and
6
+ `#delete`. It picks a temporary directory name and uploads the list of files
7
+ to that directory, it then yields the directory name so you can use it as file
8
+ identifier for the files. When the method returns it automatically cleans the
9
+ remote up via `#delete`.
10
+
11
+ ### Changed
12
+ - `Repository.upload` is now based on `Files.tmp_upload`. Functionally
13
+ all remains the same; the temporary directory name on the remote changes.
14
+ - Temporary directory names now include a thread id to reduce the risk of
15
+ conflicts across different threads.
16
+
3
17
  ## [0.8.2]
4
18
  ### Fixed
5
19
  - Temporary files no longer contain characters that trip up the daemon.
@@ -1,3 +1,18 @@
1
+ # Copyright (C) 2015-2018 Harald Sitter <sitter@kde.org>
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 3 of the License, or (at your option) any later version.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library. If not, see <http://www.gnu.org/licenses/>.
15
+
1
16
  module Aptly
2
17
  # Aptly files management.
3
18
  # @see http://www.aptly.info/doc/api/files/
@@ -14,6 +29,36 @@ module Aptly
14
29
  JSON.parse(response.body)
15
30
  end
16
31
 
32
+ # Upload files into a temporary directory on remote.
33
+ # This method expects a block which will be yielded to with the directory
34
+ # name on the remote. The directory will be deleted when this method
35
+ # returns.
36
+ # You'll generally want to use this instead of #upload so you don't have
37
+ # to worry about name collission and clean up.
38
+ #
39
+ # @param files [Array<String>] paths to files to upload
40
+ # @param connection [Connection] connection to use
41
+ # @yield [String] the remote directory name the files were uploaded to
42
+ # @return return value of block
43
+ #
44
+ # @example Can be used to push into multiple repositories with one upload
45
+ # Files.tmp_upload(files) { |d| repos.each { |r| r.add_files(d) } }
46
+ #
47
+ # @since 0.9.0
48
+ def tmp_upload(files, connection = Connection.new, **kwords)
49
+ # TODO: 1.0 find out if #upload even has a use case and maybe replace it
50
+ dir = tmp_dir_name
51
+ upload(files, dir, connection, **kwords)
52
+ uploaded = true
53
+ yield dir
54
+ ensure
55
+ # We have an uploaded var here as exceptions raised by upload would
56
+ # still run this, but they may not have the remote file, so our
57
+ # delete request would again cause an error making it harder to spot
58
+ # the orignal problem.
59
+ delete(dir) if uploaded
60
+ end
61
+
17
62
  # Delete files from remote's upload directory.
18
63
  # @param path [String] path to delete (this may be a directory or a file)
19
64
  # @return [nil]
@@ -21,6 +66,13 @@ module Aptly
21
66
  connection.send(:delete, "/files/#{path}", kwords)
22
67
  nil
23
68
  end
69
+
70
+ private
71
+
72
+ def tmp_dir_name
73
+ prefix = "#{to_s.tr(':', '_')}-#{Socket.gethostname}"
74
+ TmpName.dir(prefix)
75
+ end
24
76
  end
25
77
  end
26
78
  end
@@ -52,12 +52,9 @@ module Aptly
52
52
  # FIXME: needs to support single files
53
53
  # Convenience wrapper around {Files.upload}, {#add_file} and {Files.delete}
54
54
  def upload(files)
55
- prefix = "#{self.class.to_s.tr(':', '_')}-#{Socket.gethostname}-"
56
- directory = TmpName.dir(prefix)
57
- Files.upload(files, directory, connection)
58
- add_file(directory)
59
- ensure
60
- Files.delete(directory, connection)
55
+ Files.tmp_upload(files, connection) do |dir|
56
+ add_file(dir)
57
+ end
61
58
  end
62
59
 
63
60
  # List all packages in the repository
@@ -20,12 +20,13 @@ module Aptly
20
20
  module TmpName
21
21
  # @return [String] temporary directory name (only safe characters)
22
22
  def self.dir(prefix)
23
- format('%<prefix>s-%<time>s-%<pid>s-%<rand>s',
23
+ format('%<prefix>s-%<time>s-%<pid>s-%<tid>s-%<rand>s',
24
24
  prefix: prefix,
25
25
  # rubocop:disable Style/FormatStringToken
26
26
  time: Time.now.strftime('%Y%m%d'),
27
27
  # rubocop:enable Style/FormatStringToken
28
28
  pid: $PROCESS_ID,
29
+ tid: Thread.current.object_id,
29
30
  rand: rand(0x100000000).to_s(36))
30
31
  end
31
32
  end
@@ -1,4 +1,4 @@
1
1
  # Aptly API
2
2
  module Aptly
3
- VERSION = '0.8.2'.freeze
3
+ VERSION = '0.9.0'.freeze
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aptly-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Harald Sitter
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-01-16 00:00:00.000000000 Z
12
+ date: 2018-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -202,7 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
202
  version: '0'
203
203
  requirements: []
204
204
  rubyforge_project:
205
- rubygems_version: 2.6.11
205
+ rubygems_version: 2.7.3
206
206
  signing_key:
207
207
  specification_version: 4
208
208
  summary: REST client for the Aptly API