dpu 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/dpu/version.rb +1 -1
  3. data/lib/dpu.rb +50 -12
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e74102f4656827d87278839810c8567da7d5442b574c7d1bf37cf4efacfe678b
4
- data.tar.gz: 87de6aa0a6534f2fae3426dcc71d8802387f71e46c8aae86e4edaac140b7d89f
3
+ metadata.gz: 7e767334841a8cf8e60953a8edde125a40e62a488bd6837ae8f798ff0f9c468a
4
+ data.tar.gz: 79c11100a4390dbb54bb6186facd6226b3c981fbb14d98512a5bc772c654fe45
5
5
  SHA512:
6
- metadata.gz: 8fcb41b6badad655bef585317d7a4f27ab344a72fe574169a14dfd70547ac6ef79df92692f1ef86afb27d46e1c4c9fb0e59a5751abfe47d62a65ff84ccc55941
7
- data.tar.gz: 56553802f7c6cad522369be264632e45fec627389d5eb0232c8cc6f63e83c8a0171d78d5677f7f1df7470bbe43aca1480b1b276a388068d027b782b12b5ed582
6
+ metadata.gz: 3cd1dd74f4222f3962abee264da6d4ac90ef9f5bfb674ccfeb78c03de5c8b575b52897c47a44a3f3ec93ff5abb38b97cfca251069d06ebd2c4adb5be0eebc6da
7
+ data.tar.gz: d19919ff4b281af1b7604cdd586bece18e9f1a94fc519d947647c3196743c464d9c7b3a03edb92f0749f81857aa97a2dbbdbda8eacb1c39a1c45bfca9a79b1fa
data/lib/dpu/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Dpu
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
data/lib/dpu.rb CHANGED
@@ -8,7 +8,13 @@ module Dpu
8
8
 
9
9
  class << self
10
10
  GITHUB_REPOSITORY_URI_TEMPLATE = "https://github.com/%{account_name}/%{repository_name}"
11
- REMOTE_URL_PATTERN = [
11
+ SOURCEHUT_REPOSITORY_URI_TEMPLATE = "https://git.sr.ht/~%{account_name}/%{repository_name}"
12
+ REPOSITORY_URI_TEMPLATES = {
13
+ github: GITHUB_REPOSITORY_URI_TEMPLATE,
14
+ sourcehut: SOURCEHUT_REPOSITORY_URI_TEMPLATE,
15
+ }
16
+
17
+ GITHUB_REMOTE_URL_PATTERN = [
12
18
  %r{\Agit://github\.com/(?<account_name>[^/]+)/(?<repository_name>.+)(?=\.git)},
13
19
  %r{\Ahttps?://github\.com/(?<account_name>[^/]+)/(?<repository_name>.+)(?=\.git)},
14
20
  %r{\Agit@github\.com:(?<account_name>[^/]+)/(?<repository_name>.+)(?=\.git)},
@@ -16,18 +22,37 @@ module Dpu
16
22
  ].then { |patterns|
17
23
  Regexp.union(*patterns)
18
24
  }
25
+ SOURCEHUT_REMOTE_URL_PATTERN = [
26
+ %r{\Ahttps://git\.sr\.ht/\~(?<account_name>[^/]+)/(?<repository_name>.+)},
27
+ %r{\Agit@git\.sr\.ht:\~(?<account_name>[^/]+)/(?<repository_name>.+)},
28
+ ].then { |patterns|
29
+ Regexp.union(*patterns)
30
+ }
31
+ REMOTE_URL_PATTERNS = {
32
+ github: GITHUB_REMOTE_URL_PATTERN,
33
+ sourcehut: SOURCEHUT_REMOTE_URL_PATTERN,
34
+ }
35
+
36
+ REF_PREFIX = {
37
+ github: 'blob',
38
+ sourcehut: 'tree',
39
+ }
19
40
 
20
- def determine_permanent_uri(path, start_line_number = nil, end_line_number = nil)
41
+ def determine_permanent_uri(path_or_link, start_line_number = nil, end_line_number = nil)
42
+ path = path_or_link.realpath
21
43
  relative_path = determine_relative_path(path)
22
44
 
45
+ remote_url = get_remote_url(path)
46
+ vcs_service = determine_vcs_service(remote_url)
47
+
23
48
  permanent_uri_parts = [
24
- determine_repository_uri(path),
25
- "blob",
49
+ determine_repository_uri(vcs_service, remote_url),
50
+ REF_PREFIX[vcs_service],
26
51
  find_same_content_version(path, relative_path) || determine_commit_id(path),
27
52
  relative_path,
28
53
  ]
29
54
  permanent_uri = URI(permanent_uri_parts.join("/"))
30
- permanent_uri.fragment = determine_fragment(start_line_number, end_line_number)
55
+ permanent_uri.fragment = determine_fragment(vcs_service, start_line_number, end_line_number)
31
56
  return permanent_uri
32
57
  end
33
58
 
@@ -48,16 +73,28 @@ module Dpu
48
73
  return relative_path
49
74
  end
50
75
 
51
- def determine_repository_uri(path)
52
- stdout = run_command("git remote get-url origin", chdir: path.dirname)
53
- repository_http_or_ssh_url = stdout.chomp
76
+ def get_remote_url(path)
77
+ return run_command("git remote get-url origin", chdir: path.dirname).chomp
78
+ end
79
+
80
+ def determine_vcs_service(repository_http_or_ssh_url)
81
+ if GITHUB_REMOTE_URL_PATTERN.match?(repository_http_or_ssh_url)
82
+ return :github
83
+ end
84
+ if SOURCEHUT_REMOTE_URL_PATTERN.match?(repository_http_or_ssh_url)
85
+ return :sourcehut
86
+ end
87
+
88
+ raise "unknown VCS service: #{repository_http_or_ssh_url}"
89
+ end
54
90
 
55
- md = REMOTE_URL_PATTERN.match(repository_http_or_ssh_url)
91
+ def determine_repository_uri(vcs_service, repository_http_or_ssh_url)
92
+ md = REMOTE_URL_PATTERNS[vcs_service].match(repository_http_or_ssh_url)
56
93
  if !md
57
94
  return URI(repository_http_or_ssh_url)
58
95
  end
59
96
 
60
- url = GITHUB_REPOSITORY_URI_TEMPLATE % {
97
+ url = REPOSITORY_URI_TEMPLATES[vcs_service] % {
61
98
  account_name: md[:account_name],
62
99
  repository_name: md[:repository_name],
63
100
  }
@@ -87,10 +124,11 @@ module Dpu
87
124
  return same_content_version
88
125
  end
89
126
 
90
- def determine_fragment(start_line_number, end_line_number)
127
+ def determine_fragment(vcs_service, start_line_number, end_line_number)
91
128
  return nil if !start_line_number
92
129
  return "L#{start_line_number}" if !end_line_number || start_line_number == end_line_number
93
- return "L#{start_line_number}-L#{end_line_number}"
130
+ return "L#{start_line_number}-L#{end_line_number}" if vcs_service == :github
131
+ return "L#{start_line_number}-#{end_line_number}" if vcs_service == :sourcehut
94
132
  end
95
133
  end
96
134
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dpu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuya.Nishida.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-06-29 00:00:00.000000000 Z
11
+ date: 2023-07-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: debug