apt-spy2 0.7.3 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 89ef6a24eb7eafd20007b54eadeeeea4ffa0c10114dca7efd62d4a8b7adff3c7
4
- data.tar.gz: e129a99d18c3e17262f7b3e0c04aafef66041861bf6fd5d144fd7d139e254f0c
3
+ metadata.gz: 7622e67a84b791b9ff1e03931d4b216d5a2bd879b0ac9334ee6ccc140e1c16b9
4
+ data.tar.gz: a5fc5ef8e9fc0a98e7448253d0e95dc6a55113b3586ae7fbfabb260d78f0c6ff
5
5
  SHA512:
6
- metadata.gz: 33df33456da6b923723eb9253ca7c774b35bb42306d27ab00fddaf861f758fe6fe6e7d9f0993d5c4481cc0b818b859589cb3c85a8e199ee79f4da12275fb8ece
7
- data.tar.gz: bcffd1814b734650587939c66c6c545b76c171920db3558b5551b1ddd7b657e0b5a9429842403aff1a4b976ea16c77c462f191c444a7c58414d59ef6b87a2bbd
6
+ metadata.gz: 3f4fd668a86d485758610e2870cd7650c5875671711a027f6149a80ce63134f817b41087aa795ff40106ee39041f78f333224b5285c90d769ee4142a225f3693
7
+ data.tar.gz: d6be7ad7b4db2471f3ef28d5ae6efc4bd9e44fb09c8f3fb337330c42aed0913c784e501eab6bdc6d8f7ac252da759336d06cb2034158c4d221dce21f4fb464b9
@@ -7,3 +7,9 @@ updates:
7
7
  open-pull-requests-limit: 10
8
8
  assignees:
9
9
  - till
10
+ - package-ecosystem: "github-actions"
11
+ directory: "/"
12
+ schedule:
13
+ interval: "weekly"
14
+ assignees:
15
+ - till
@@ -0,0 +1,70 @@
1
+ # For most projects, this workflow file will not need changing; you simply need
2
+ # to commit it to your repository.
3
+ #
4
+ # You may wish to alter this file to override the set of languages analyzed,
5
+ # or to provide custom queries or build logic.
6
+ #
7
+ # ******** NOTE ********
8
+ # We have attempted to detect the languages in your repository. Please check
9
+ # the `language` matrix defined below to confirm you have the correct set of
10
+ # supported CodeQL languages.
11
+ #
12
+ name: "CodeQL"
13
+
14
+ on:
15
+ push:
16
+ branches: [ master ]
17
+ pull_request:
18
+ # The branches below must be a subset of the branches above
19
+ branches: [ master ]
20
+ schedule:
21
+ - cron: '43 11 * * 5'
22
+
23
+ jobs:
24
+ analyze:
25
+ name: Analyze
26
+ runs-on: ubuntu-latest
27
+ permissions:
28
+ actions: read
29
+ contents: read
30
+ security-events: write
31
+
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ language: [ 'ruby' ]
36
+ # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
37
+ # Learn more about CodeQL language support at https://git.io/codeql-language-support
38
+
39
+ steps:
40
+ - name: Checkout repository
41
+ uses: actions/checkout@v3
42
+
43
+ # Initializes the CodeQL tools for scanning.
44
+ - name: Initialize CodeQL
45
+ uses: github/codeql-action/init@v2
46
+ with:
47
+ languages: ${{ matrix.language }}
48
+ # If you wish to specify custom queries, you can do so here or in a config file.
49
+ # By default, queries listed here will override any specified in a config file.
50
+ # Prefix the list here with "+" to use these queries and those in the config file.
51
+ # queries: ./path/to/local/query, your-org/your-repo/queries@main
52
+
53
+ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
54
+ # If this step fails, then you should remove it and run the build manually (see below)
55
+ - name: Autobuild
56
+ uses: github/codeql-action/autobuild@v2
57
+
58
+ # ℹ️ Command-line programs to run using the OS shell.
59
+ # 📚 https://git.io/JvXDl
60
+
61
+ # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
62
+ # and modify them (or add more) to build your code if your project
63
+ # uses a compiled language
64
+
65
+ #- run: |
66
+ # make bootstrap
67
+ # make release
68
+
69
+ - name: Perform CodeQL Analysis
70
+ uses: github/codeql-action/analyze@v2
@@ -11,12 +11,12 @@ jobs:
11
11
  strategy:
12
12
  matrix:
13
13
  ruby-version:
14
+ - '3.2'
14
15
  - '3.1'
15
16
  - '3.0'
16
- - 2.7
17
- - 2.6
17
+ - '2.7'
18
18
  steps:
19
- - uses: actions/checkout@v2
19
+ - uses: actions/checkout@v3
20
20
  - uses: ruby/setup-ruby@v1
21
21
  with:
22
22
  ruby-version: ${{ matrix.ruby-version }}
@@ -26,8 +26,24 @@ jobs:
26
26
  - run: ls -lah ./pkg/apt-spy2*
27
27
  - run: gem install pkg/apt-spy2*
28
28
  - run: apt-spy2 check
29
+ - run: sudo env "PATH=$PATH" apt-spy2 fix --commit
29
30
  - uses: coverallsapp/github-action@master
30
31
  with:
31
32
  github-token: ${{ secrets.GITHUB_TOKEN }}
32
33
 
34
+ test_strict:
35
+ runs-on: ubuntu-latest
36
+ steps:
37
+ - uses: actions/checkout@v3
38
+ - uses: ruby/setup-ruby@v1
39
+ with:
40
+ ruby-version: 3.2
41
+ - run: bundle install
42
+ - run: bundle exec rake test
43
+ - run: bundle exec rake build
44
+ - run: ls -lah ./pkg/apt-spy2*
45
+ - run: gem install pkg/apt-spy2*
46
+ - run: apt-spy2 check --strict
47
+ - run: sudo env "PATH=$PATH" apt-spy2 fix --commit --strict
48
+
33
49
 
@@ -10,7 +10,8 @@ jobs:
10
10
  publish:
11
11
  runs-on: ubuntu-latest
12
12
  steps:
13
- - uses: actions/checkout@v2
13
+ - uses: actions/checkout@v3
14
+ - run: git config --global --add safe.directory /github/workspace
14
15
  - uses: ruby/setup-ruby@v1
15
16
  with:
16
17
  ruby-version: 3.0
data/Dockerfile CHANGED
@@ -1,4 +1,13 @@
1
- FROM ruby:2.6-slim
1
+ FROM ubuntu:22.10
2
+
3
+ RUN apt update -y \
4
+ && apt install -y \
5
+ ruby3.0 \
6
+ ruby-dev \
7
+ ruby-bundler \
8
+ git \
9
+ lsb-release \
10
+ build-essential
2
11
 
3
12
  WORKDIR /work
4
13
  COPY . /work
data/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  gemspec
data/Gemfile.lock CHANGED
@@ -1,25 +1,45 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- apt-spy2 (0.7.3)
4
+ apt-spy2 (0.8.2)
5
5
  colored (>= 1.2)
6
6
  json
7
- nokogiri (>= 1.6, < 1.13)
7
+ nokogiri (~> 1.14.1)
8
8
  thor (>= 0.18.1)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
12
12
  specs:
13
+ ast (2.4.2)
13
14
  colored (1.2)
14
15
  docile (1.4.0)
15
- json (2.6.1)
16
- mini_portile2 (2.6.1)
16
+ json (2.6.3)
17
+ mini_portile2 (2.8.1)
17
18
  minitest (5.15.0)
18
- nokogiri (1.12.5)
19
- mini_portile2 (~> 2.6.1)
19
+ nokogiri (1.14.1)
20
+ mini_portile2 (~> 2.8.0)
20
21
  racc (~> 1.4)
21
- racc (1.6.0)
22
+ parallel (1.22.1)
23
+ parser (3.2.1.0)
24
+ ast (~> 2.4.1)
25
+ racc (1.6.2)
26
+ rainbow (3.1.1)
22
27
  rake (13.0.6)
28
+ regexp_parser (2.7.0)
29
+ rexml (3.2.5)
30
+ rubocop (1.45.1)
31
+ json (~> 2.3)
32
+ parallel (~> 1.10)
33
+ parser (>= 3.2.0.0)
34
+ rainbow (>= 2.2.2, < 4.0)
35
+ regexp_parser (>= 1.8, < 3.0)
36
+ rexml (>= 3.2.5, < 4.0)
37
+ rubocop-ast (>= 1.24.1, < 2.0)
38
+ ruby-progressbar (~> 1.7)
39
+ unicode-display_width (>= 2.4.0, < 3.0)
40
+ rubocop-ast (1.24.1)
41
+ parser (>= 3.1.1.0)
42
+ ruby-progressbar (1.11.0)
23
43
  simplecov (0.21.2)
24
44
  docile (~> 1.1)
25
45
  simplecov-html (~> 0.11)
@@ -27,7 +47,8 @@ GEM
27
47
  simplecov-html (0.12.3)
28
48
  simplecov-lcov (0.8.0)
29
49
  simplecov_json_formatter (0.1.3)
30
- thor (1.1.0)
50
+ thor (1.2.1)
51
+ unicode-display_width (2.4.2)
31
52
 
32
53
  PLATFORMS
33
54
  ruby
@@ -37,6 +58,7 @@ DEPENDENCIES
37
58
  bundler (~> 2.0)
38
59
  minitest (~> 5.15.0)
39
60
  rake
61
+ rubocop
40
62
  simplecov (~> 0.18)
41
63
  simplecov-lcov (~> 0.8.0)
42
64
 
data/Makefile CHANGED
@@ -1,11 +1,29 @@
1
+ .PHONY: clean install release docker-build docker-run
2
+
3
+ IMAGE?=lagged/apt-spy2:dev
4
+
5
+ container:=apt-spy2
6
+
7
+ clean:
8
+ docker rm -f $(container) || true
9
+
1
10
  install:
2
11
  bundle install --path ./vendor/bundle
3
12
 
4
13
  release:
5
14
  bundle exec rake release
6
15
 
16
+ lint:
17
+ bundle exec rubocop .
18
+
19
+ test: install
20
+ bundle exec rake test
21
+
7
22
  docker-build:
8
- docker build -t lagged/apt-spy2:dev .
23
+ docker build -t $(IMAGE) .
9
24
 
10
- docker-run: docker-build
11
- docker run -it lagged/apt-spy2:dev bash
25
+ docker-run: clean docker-build
26
+ docker run --rm -it \
27
+ --name $(container) \
28
+ -v $(CURDIR):/work \
29
+ $(IMAGE) bash
data/README.md CHANGED
@@ -3,20 +3,20 @@
3
3
  … or: "apt-spy for Ubuntu"
4
4
 
5
5
  [![pr](https://github.com/lagged/apt-spy2/actions/workflows/pr.yml/badge.svg)](https://github.com/lagged/apt-spy2/actions/workflows/pr.yml)
6
- [![Gem Version](https://badge.fury.io/rb/apt-spy2.svg)](https://badge.fury.io/rb/apt-spy2)
6
+ ![apt-spy2 (including prereleases)](https://img.shields.io/gem/v/apt-spy2?include_prereleases)
7
7
  [![Code Climate](https://codeclimate.com/github/lagged/apt-spy2.png)](https://codeclimate.com/github/lagged/apt-spy2)
8
8
  [![Coverage Status](https://coveralls.io/repos/lagged/apt-spy2/badge.png)](https://coveralls.io/r/lagged/apt-spy2)
9
9
 
10
10
 
11
11
  ## Installation
12
12
 
13
- ```
13
+ ```sh
14
14
  gem install apt-spy2
15
15
  ```
16
16
 
17
17
  ## Usage
18
18
 
19
- ```
19
+ ```sh
20
20
  $ apt-spy2 [21:03:52]
21
21
  apt-spy2 commands:
22
22
  apt-spy2 check # Evaluate mirrors
@@ -30,27 +30,28 @@ apt-spy2 commands:
30
30
  Displays a list of currently available mirrors. These mirrors are automatically selected via
31
31
  [ubuntu-mirrors](http://mirrors.ubuntu.com) using your IP's location.
32
32
 
33
- ```
33
+ ```sh
34
34
  $ apt-spy2 list
35
35
  ...
36
36
  ```
37
37
 
38
38
  Since `mirrors.ubuntu.com` is frequently down, you can the list on [Launchpad](launchpad.net/ubuntu/+archivemirrors):
39
39
 
40
- ```
40
+ ```sh
41
41
  $ apt-spy2 list --launchpad --country=Germany
42
42
  ...
43
43
  ```
44
44
 
45
45
  ### check command
46
46
 
47
- `check` works like `list`, but also determines if the servers returned are working. It supports Launchpad as well.
47
+ `check` works like `list`, but also determines if the servers returned are working. It supports the flag `--launchpad` as well and additionally a flag `--strict` which checks if a mirror carries a certain release and distribution.
48
48
 
49
- ```
49
+ ```sh
50
50
  $ apt-spy2 check
51
51
  ...
52
- $ apt-spy2 list --launchpad --country=US
52
+ $ apt-spy2 check --launchpad --country=US
53
53
  ...
54
+ $ apt-spy2 check --strict
54
55
  ```
55
56
 
56
57
  ### fix command
@@ -69,10 +70,10 @@ See `apt-spy2 help list|check|fix` for available options.
69
70
 
70
71
  ### exit codes
71
72
 
72
- * 0 - all went well
73
- * 1 - some kind of error
73
+ * 0 - all went well
74
+ * 1 - some kind of error
74
75
 
75
- ### output and non-interactiveness
76
+ ### output and non-interactive behavior
76
77
 
77
78
  See `apt-spy2 help COMMAND` for more information.
78
79
 
@@ -84,6 +85,7 @@ Generally, `apt-spy2` plays especially nice in a non-interactive environment and
84
85
 
85
86
  ### Release (procedure)
86
87
 
87
- - update version in `lib/apt/spy2/version.rb`
88
- - `bundle install`
89
- - `git commit -a -m 'New release' && git tag -a vVERSION && git push --tags`
88
+ * update version in `lib/apt/spy2/version.rb`
89
+ * `bundle install`
90
+ * `git commit -a 'Prep x.y.z'
91
+ * `git tag -a vVERSION && git push --tags`
data/Rakefile CHANGED
@@ -1,24 +1,17 @@
1
- require "bundler/gem_tasks"
2
- require "minitest/autorun"
3
- require "simplecov"
4
- require "simplecov-lcov"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
5
 
6
6
  Encoding.default_external = Encoding::UTF_8
7
7
  Encoding.default_internal = Encoding::UTF_8
8
8
 
9
- task :test do
9
+ Rake::TestTask.new do |t|
10
10
  ENV['COVERAGE'] = 'true'
11
+ t.pattern = 'tests/*_test.rb'
11
12
 
12
- SimpleCov.formatter = SimpleCov::Formatter::LcovFormatter
13
- SimpleCov::Formatter::LcovFormatter.config do |c|
14
- c.output_directory = './coverage'
15
- c.report_with_single_file = true
16
- c.single_report_path = './coverage/lcov.info'
17
- end
18
- SimpleCov.start
19
-
20
- $LOAD_PATH.unshift('lib', 'tests')
21
- Dir.glob('./tests/*_test.rb') do |f|
22
- require f
23
- end
13
+ # $LOAD_PATH.unshift('lib', 'tests')
14
+ # Dir.glob('./tests/*_test.rb').sort.each do |f|
15
+ # require f
16
+ # end
24
17
  end
data/apt-spy2.gemspec CHANGED
@@ -1,33 +1,36 @@
1
- # coding: utf-8
2
- lib = File.expand_path('../lib', __FILE__)
1
+ # frozen_string_literal: true
2
+
3
+ require 'English'
4
+ lib = File.expand_path('lib', __dir__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'apt/spy2/version'
5
7
 
6
8
  Gem::Specification.new do |spec|
7
- spec.name = "apt-spy2"
9
+ spec.name = 'apt-spy2'
8
10
  spec.version = Apt::Spy2::VERSION
9
- spec.authors = ["till"]
10
- spec.email = ["till@php.net"]
11
- spec.description = "Keep your /etc/apt/sources.list up to date"
12
- spec.summary = "apt-spy2, or apt-spy for ubuntu"
13
- spec.homepage = "https://github.com/lagged/apt-spy2"
11
+ spec.authors = ['till']
12
+ spec.email = ['till@php.net']
13
+ spec.description = 'Keep your /etc/apt/sources.list up to date'
14
+ spec.summary = 'apt-spy2, or apt-spy for ubuntu'
15
+ spec.homepage = 'https://github.com/lagged/apt-spy2'
14
16
  spec.license = 'BSD-2-Clause'
15
17
 
16
- spec.required_ruby_version = '>= 2.6', '< 3.2'
18
+ spec.required_ruby_version = '>= 2.7', '< 3.3'
17
19
 
18
- spec.files = `git ls-files`.split($/)
20
+ spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
19
21
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
20
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
21
- spec.require_paths = ["lib"]
23
+ spec.require_paths = ['lib']
22
24
 
23
- spec.add_dependency 'thor', '>= 0.18.1'
24
25
  spec.add_dependency 'colored', '>= 1.2'
25
26
  spec.add_dependency 'json'
26
- spec.add_dependency 'nokogiri', '>= 1.6', '< 1.13'
27
+ spec.add_dependency 'nokogiri', '~> 1.14.1'
28
+ spec.add_dependency 'thor', '>= 0.18.1'
27
29
 
28
- spec.add_development_dependency "bundler", "~> 2.0"
29
- spec.add_development_dependency "rake"
30
- spec.add_development_dependency "minitest", "~> 5.15.0"
31
- spec.add_development_dependency "simplecov", "~> 0.18"
32
- spec.add_development_dependency "simplecov-lcov", "~> 0.8.0"
30
+ spec.add_development_dependency 'bundler', '~> 2.0'
31
+ spec.add_development_dependency 'minitest', '~> 5.15.0'
32
+ spec.add_development_dependency 'rake'
33
+ spec.add_development_dependency 'rubocop'
34
+ spec.add_development_dependency 'simplecov', '~> 0.18'
35
+ spec.add_development_dependency 'simplecov-lcov', '~> 0.8.0'
33
36
  end
data/bin/apt-spy2 CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'apt/spy2'
4
5
  require 'colored'
@@ -8,7 +9,7 @@ Encoding.default_internal = Encoding::UTF_8
8
9
 
9
10
  begin
10
11
  AptSpy2.start
11
- rescue => the_error
12
- puts the_error.to_s.white_on_red
12
+ rescue StandardError => e
13
+ puts e.to_s.white_on_red
13
14
  exit 1
14
15
  end
@@ -1,33 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Apt
2
4
  module Spy2
5
+ # lookup a country based on code
3
6
  class Country
4
-
5
7
  def initialize(country_database)
6
8
  @database = country_database
7
9
  end
8
10
 
9
11
  def to_country_name(code)
10
12
  code = code.upcase
11
- return capitalize(code) unless code.length == 2
13
+ return capitalize!(code) unless code.length == 2
12
14
 
13
15
  File.open(@database).each do |line|
14
16
  country, tld = line.split(';', 2)
15
17
  tld.gsub!(/\n/, '')
16
18
 
17
- if code == tld
18
- return capitalize(country)
19
- end
20
-
19
+ return capitalize!(country) if code == tld
21
20
  end
22
21
 
23
22
  raise "Could not look up: #{code}"
24
23
  end
25
24
 
26
25
  private
27
- def capitalize(str)
28
- return str.split(" ").map(&:capitalize).join(" ")
29
- end
30
26
 
27
+ def capitalize!(str)
28
+ str.split(' ').map(&:capitalize).join(' ')
29
+ end
31
30
  end
32
31
  end
33
32
  end
@@ -1,30 +1,27 @@
1
- require 'open-uri'
1
+ # frozen_string_literal: true
2
+
3
+ require 'apt/spy2/request'
2
4
 
3
5
  module Apt
4
6
  module Spy2
7
+ # download url (e.g. mirror list or launchpad page)
5
8
  class Downloader
6
-
7
- def initialize(url = nil)
8
- @url = url if !url.nil?
9
- end
10
-
11
9
  def do_download(url = nil)
12
- @url = url if !url.nil?
10
+ raise 'Please supply a url.' if url.nil?
13
11
 
14
- raise "Please supply a url." if url.nil?
12
+ req = Apt::Spy2::Request.new(url)
15
13
 
16
14
  begin
17
- return URI.open(@url, :read_timeout => 10).read
18
- rescue OpenURI::HTTPError => the_error
19
- case the_error.io.status[0]
20
- when "404"
21
- raise "The URL #{@url} does not exist."
22
- else
23
- raise "Status: #{the_error.io.status[0]}"
24
- end
15
+ response = req.get
16
+ return response.body if response.code == '200'
17
+
18
+ raise "The URL #{@url} does not exist." if response.code == '404'
19
+
20
+ raise "Status code: #{response.code}"
21
+ rescue StandardError => e
22
+ raise e
25
23
  end
26
24
  end
27
-
28
25
  end
29
26
  end
30
27
  end
@@ -1,15 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'nokogiri'
2
4
 
3
5
  module Apt
4
6
  module Spy2
7
+ # parse launchpad output
5
8
  class Launchpad
6
-
7
9
  def initialize(download)
8
10
  @launchpad = download
9
11
  end
10
12
 
11
- def get_mirrors(country)
12
-
13
+ def mirrors(country)
13
14
  mirrors = []
14
15
 
15
16
  document = Nokogiri::HTML(@launchpad)
@@ -27,10 +28,8 @@ module Apt
27
28
  end
28
29
  end
29
30
 
30
- return mirrors
31
-
31
+ mirrors
32
32
  end
33
-
34
33
  end
35
34
  end
36
35
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+ require 'net/https'
5
+ require 'uri'
6
+
7
+ module Apt
8
+ module Spy2
9
+ # make requests
10
+ class Request
11
+ def initialize(url)
12
+ uri = URI(url)
13
+
14
+ # sets hopefully sensible timeouts for read and connection
15
+ http = Net::HTTP.new(uri.host, uri.port)
16
+ http.read_timeout = 10
17
+ http.open_timeout = 10
18
+ http.use_ssl = true if uri.scheme == 'https'
19
+
20
+ @http = http
21
+ @request_uri = uri.request_uri
22
+ end
23
+
24
+ def get
25
+ @http.request(Net::HTTP::Get.new(@request_uri))
26
+ end
27
+
28
+ def head
29
+ @http.request(Net::HTTP::Head.new(@request_uri))
30
+ end
31
+ end
32
+ end
33
+ end
@@ -1,19 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Apt
2
4
  module Spy2
5
+ # wraps around the \n delimited list of mirrors
3
6
  class UbuntuMirrors
4
-
5
7
  def initialize(download)
6
8
  @ubuntu_mirrors = download
7
9
  end
8
10
 
9
- def get_mirrors(country)
10
-
11
+ def mirrors(_country)
11
12
  mirrors = @ubuntu_mirrors
12
- mirrors = mirrors.split(/\n/)
13
- return mirrors
14
-
13
+ mirrors.split(/\n/)
15
14
  end
16
-
17
15
  end
18
16
  end
19
17
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Apt
4
+ module Spy2
5
+ # build mirror url
6
+ class Url
7
+ def initialize(strict)
8
+ @strict = strict
9
+ end
10
+
11
+ def adjust!(mirror)
12
+ return mirror unless @strict
13
+
14
+ "#{mirror}dists/#{release}/Contents-#{arch}.gz"
15
+ end
16
+
17
+ private
18
+
19
+ def arch
20
+ `dpkg --print-architecture`.strip
21
+ end
22
+
23
+ def release
24
+ `lsb_release -c`.split(' ')[1].strip
25
+ end
26
+ end
27
+ end
28
+ end