stepmod-utils 0.3.12 → 0.3.16

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
2
  SHA256:
3
- metadata.gz: cede4c978acf6fd33ac7bae2dd5a0020e8f0e9f5ac06e1562f089dd2aa702ee5
4
- data.tar.gz: d4cdb2bf5abe663d7089c6d74a939fab72b698ef64a3029695cfd467a423f74d
3
+ metadata.gz: e40fc2ba271e4bd8e0859cb307831ead927b7bc12154b5845f528694ad18c8f8
4
+ data.tar.gz: e1b6f691a70d1e6531a7f841b5a998d49d6c376a84a9da340246b2920bd8459d
5
5
  SHA512:
6
- metadata.gz: 9f9db582dd4c85836ed96c8916024d9cf75c8019a512305634df73af0be3dbe9faf53ea2e8b516afe7417f0c68a50f5b27303d5034cf627fcdbacf4e05a3f1c5
7
- data.tar.gz: 52cd06f6cd0a044d4e904a6daa85d2802a9731b1b2aa13643087b71c60f3c106f67623dca248a00c970f48875faf415776b3f48de74bf51539b6a3c94b9f57f2
6
+ metadata.gz: e5e62c15d95982deb33e03af65b9720cdb34746adfa36bf5945a2823fb0be9800beff3e8cf4b3e4acd34ebf940bacb0ff2b4a83b31af27e8d01cba2599fcc537
7
+ data.tar.gz: c9efdfa5eed962291c9454227e8d2c7c22b4ba665c88745d059f77cdfb5ae2bdb414d32d7c1ee957aec10db634c1f0fbc388851360ae4edb9bf9d721f740dca3
@@ -10,23 +10,6 @@ on:
10
10
 
11
11
  jobs:
12
12
  rake:
13
- name: Test on Ruby ${{ matrix.ruby }} ${{ matrix.os }}
14
- runs-on: ${{ matrix.os }}
15
- continue-on-error: ${{ matrix.experimental }}
16
- strategy:
17
- fail-fast: false
18
- matrix:
19
- ruby: [ '3.0', '2.7', '2.6', '2.5' ]
20
- os: [ ubuntu-latest, windows-latest, macos-latest ]
21
- experimental: [ false ]
22
- steps:
23
- - uses: actions/checkout@v2
24
- with:
25
- submodules: true
26
-
27
- - uses: ruby/setup-ruby@v1
28
- with:
29
- ruby-version: ${{ matrix.ruby }}
30
- bundler-cache: true
31
-
32
- - run: bundle exec rake
13
+ uses: metanorma/metanorma-build-scripts/.github/workflows/generic-rake.yml@main
14
+ secrets:
15
+ pat_token: ${{ secrets.METANORMA_CI_PAT_TOKEN }}
@@ -15,32 +15,10 @@ on:
15
15
 
16
16
  jobs:
17
17
  release:
18
- runs-on: ubuntu-latest
19
- steps:
20
- - uses: actions/checkout@v2
18
+ uses: metanorma/metanorma-build-scripts/.github/workflows/rubygems-release.yml@main
19
+ with:
20
+ next_version: ${{ github.event.inputs.next_version }}
21
+ event_name: ${{ github.event_name }}
22
+ secrets:
23
+ rubygems-api-key: ${{ secrets.METANORMA_CI_RUBYGEMS_API_KEY }}
21
24
 
22
- - uses: ruby/setup-ruby@v1
23
- with:
24
- ruby-version: '2.6'
25
- bundler-cache: true
26
-
27
- - run: gem install gem-release
28
-
29
- - run: |
30
- git config user.name github-actions
31
- git config user.email github-actions@github.com
32
-
33
- - if: github.event_name == 'workflow_dispatch' && github.event.inputs.next_version != 'skip'
34
- run: gem bump --version ${{ github.event.inputs.next_version }} --tag --push
35
-
36
- - name: publish to rubygems.org
37
- env:
38
- RUBYGEMS_API_KEY: ${{secrets.METANORMA_CI_RUBYGEMS_API_KEY}}
39
- run: |
40
- gem install gem-release
41
- envsubst << 'EOF' > ~/.gem/credentials
42
- ---
43
- :rubygems_api_key: ${RUBYGEMS_API_KEY}
44
- EOF
45
- chmod 0600 ~/.gem/credentials
46
- gem release
data/README.adoc CHANGED
@@ -10,12 +10,8 @@ image:https://img.shields.io/github/commits-since/metanorma/stepmod-utils/latest
10
10
 
11
11
  == Purpose
12
12
 
13
- The `stepmod-utils` Ruby gem provides a number of tools to work with the STEPmod repository.
14
-
15
-
16
- == CVS to Git migration procedures
17
-
18
- include::migrating_from_cvs.adoc[]
13
+ The `stepmod-utils` Ruby gem provides a number of tools to work with the STEPmod
14
+ repository.
19
15
 
20
16
 
21
17
  == Installation
@@ -31,11 +27,8 @@ Or include it in your gemspec.
31
27
 
32
28
  [source,sh]
33
29
  ----
34
- # Extracts from current directory
35
- $ stepmod-extract-terms
36
-
37
- # Extracts from specified stepmod/ or stepmod/data/ directory
38
- $ stepmod-extract-terms {stepmod-data-directory}
30
+ # Extracts from specified stepmod/data/ directory
31
+ $ stepmod-extract-terms -p {stepmod-data-directory} -i {path-to-repository_index.xml}
39
32
  ----
40
33
 
41
34
  Then these files will be created:
@@ -118,48 +111,15 @@ expg_image:contract_schemaexpg1.xml[]
118
111
  expg_image:contract_schemaexpg2.xml[]
119
112
  ----
120
113
 
114
+ == Git repository
121
115
 
122
- == CVS revision detection
123
-
124
- If the STEPmod repository is a CVS repository, it will display the
125
- working and repository revisions as comments.
126
-
127
- WARNING: CVS revision detection can be *slow*! Be patient.
128
-
129
- Sample output:
130
-
131
- [source,sh]
132
- ----
133
- [stepmod-utils] INFO: STEPmod directory set to ../x/stepmod/.
134
- [stepmod-utils] INFO: STEPmod directory is a CVS repository and will detect revisions.
135
- [stepmod-utils] INFO: [CVS] Detecting file revisions can be slow, please be patient!
136
- [stepmod-utils] INFO: Detecting paths...
137
- [stepmod-utils] INFO: Processing XML file data/business_object_models/managed_model_based_3d_engineering/business_object_model.xml
138
- [stepmod-utils] INFO: Detecting CVS revision...
139
- [stepmod-utils] INFO: CVS working rev (1.148), repo rev (1.148)
140
- [stepmod-utils] INFO: Completed processing XML file data/business_object_models/managed_model_based_3d_engineering/business_object_model.xml
141
- [stepmod-utils] INFO: Processing XML file data/business_object_models/managed_model_based_3d_engineering_domain/business_object_model.xml
142
- [stepmod-utils] INFO: Detecting CVS revision...
143
- [stepmod-utils] INFO: CVS working rev (1.31), repo rev (1.31)
144
- [stepmod-utils] INFO: Completed processing XML file data/business_object_models/managed_model_based_3d_engineering_domain/business_object_model.xml
145
- ...
146
- stepmod/data/business_object_models/managed_model_based_3d_engineering_domain/business_object_model.xml
147
- [stepmod-utils] INFO: written to: 031-generated-terms.adoc
148
- [stepmod-utils] INFO: written to: 991-generated-bibliography.adoc
149
- ----
150
-
151
-
152
- == Non-CVS repository
153
-
154
- If the STEPmod repository is not a CVS repository, or if the `cvs` executable
155
- cannot be found, term extract will still work.
116
+ If the STEPmod repository is a Git repository, term extract will work.
156
117
 
157
118
  Sample output:
158
119
 
159
120
  [source,sh]
160
121
  ----
161
122
  [stepmod-utils] INFO: STEPmod directory set to ../iso-10303-stepmod.
162
- [stepmod-utils] INFO: STEPmod directory is not a CVS repository, skipping revision detection.
163
123
  [stepmod-utils] INFO: Detecting paths...
164
124
  [stepmod-utils] INFO: Processing XML file data/application_protocols/boundary_representation_for_iso_14306_open_jt/application_protocol.xml
165
125
  [stepmod-utils] INFO: skipped ISO/CD 10303-243 as it is not IS, DIS or TS
@@ -20,15 +20,52 @@ end
20
20
 
21
21
  require "bundler/setup"
22
22
  require "stepmod/utils/terms_extractor"
23
+ require 'optparse'
23
24
 
24
- stepmod_dir = ARGV.first || Dir.pwd
25
+ def log(message)
26
+ puts "[stepmod-utils] #{message}"
27
+ end
28
+
29
+ options = {}
30
+ OptionParser.new do |opts|
31
+ opts.banner = "Usage: #{$0} [options]"
32
+
33
+ opts.on("-p", "--path STEPMOD_DATA_PATH", String, "Path to STEPmod data directory") do |path|
34
+ options[:stepmod_dir] = path
35
+ end
36
+
37
+ opts.on("-i", "--index INDEX_PATH", String, "Path to repository_index.xml") do |path|
38
+ unless path.nil?
39
+ options[:index_path] = Pathname.new(path).to_s
40
+ end
41
+ end
42
+
43
+ opts.on_tail("-h", "--help", "Show this message") do
44
+ puts opts
45
+ exit
46
+ end
47
+ end.parse!
48
+
49
+ stepmod_dir = options[:stepmod_dir]
50
+ if stepmod_dir.nil?
51
+ raise StandardError.new("STEPmod data path not set, set with the `-p` option.")
52
+ else
53
+ log "STEPmod data path: `#{stepmod_dir}`"
54
+ end
55
+
56
+ index_path = options[:index_path] || File.join(stepmod_dir, "repository_index.xml")
57
+ unless File.exists?(index_path)
58
+ raise StandardError.new("Index file not present at #{index_path}, set with the `-i` option.")
59
+ else
60
+ log "Repository index path: `#{index_path}`"
61
+ end
25
62
 
26
63
  general_concepts,
27
64
  resource_concepts,
28
65
  parsed_bibliography,
29
66
  part_concepts,
30
67
  part_resources,
31
- part_modules = Stepmod::Utils::TermsExtractor.call(stepmod_dir)
68
+ part_modules = Stepmod::Utils::TermsExtractor.call(stepmod_dir, index_path)
32
69
 
33
70
  def part_to_title(bibdata)
34
71
  case bibdata.part.to_i
@@ -69,10 +106,6 @@ def replace_images(content)
69
106
  content
70
107
  end
71
108
 
72
- def log(message)
73
- puts "[stepmod-utils] #{message}"
74
- end
75
-
76
109
  part_concepts.each do |(bibdata, current_part_concepts)|
77
110
  current_part_concepts = current_part_concepts.to_a.map do |n|
78
111
  n.localizations["en"]
@@ -4,7 +4,9 @@ module Stepmod
4
4
  module Utils
5
5
  class Cleaner < ReverseAdoc::Cleaner
6
6
  def tidy(string)
7
- super.gsub(/^ +/, "")
7
+ super
8
+ .gsub(/^ +/, "")
9
+ .gsub(/\*\s([,.])/, '*\1') # remove space between * and comma or dot.
8
10
  end
9
11
  end
10
12
  end
@@ -124,7 +124,7 @@ module Stepmod
124
124
 
125
125
  def to_mn_adoc
126
126
  <<~TEXT
127
- // STEPmod path:#{!file_path.empty? ? " #{file_path}" : ''}
127
+ // STEPmod path:#{file_path.empty? ? '' : " #{file_path}"}
128
128
  #{converted_definition}
129
129
 
130
130
  [.source]
@@ -3,7 +3,7 @@ module Stepmod
3
3
  module Converters
4
4
  class ExtDescription < ReverseAdoc::Converters::Base
5
5
  def convert(node, state = {})
6
- state = state.merge(schema_name: node["linkend"])
6
+ state = state.merge(schema_name: node["linkend"], non_flanking_whitesapce: true)
7
7
  child_text = treat_children(node, state).strip
8
8
 
9
9
  <<~TEMPLATE
@@ -43,10 +43,10 @@ module Stepmod
43
43
 
44
44
  domain = case linkend.first
45
45
  when /_mim$/, /_arm$/
46
- "STEP module"
46
+ "ISO 10303 application module"
47
47
  # when /_schema$/
48
48
  else
49
- "STEP resource"
49
+ "ISO 10303 resource"
50
50
  end
51
51
 
52
52
  <<~TEMPLATE
@@ -8,12 +8,13 @@ module Stepmod
8
8
 
9
9
  def convert(node, state = {})
10
10
  content = treat_children(node, state.merge(already_strong: true))
11
+ strong_tag = state[:non_flanking_whitesapce] ? '**' : '*'
11
12
  if content.strip.empty? || state[:already_strong]
12
13
  content
13
14
  else
14
15
  handle_express_escape_seq(
15
16
  node,
16
- "#{content[/^\s*/]}*#{content.strip}*#{content[/\s*$/]}"
17
+ "#{content[/^\s*/]}#{strong_tag}#{content.strip}#{strong_tag}#{content[/\s*$/]}"
17
18
  )
18
19
  end
19
20
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "stepmod/utils/converters/synonym"
4
+ require "stepmod/utils/term"
5
+ require "glossarist"
4
6
 
5
7
  module Stepmod
6
8
  module Utils
@@ -22,22 +24,20 @@ module Stepmod
22
24
  unless first_child &&
23
25
  node.text.split(";").length == 2 &&
24
26
  defined?(Stepmod::Utils::Converters::Synonym)
25
- return "=== #{treat_acronym(treat_children(node, state).strip)}"
27
+
28
+ return Stepmod::Utils::Term.from_h(
29
+ "definition" => treat_children(node, state).strip,
30
+ ).to_mn_adoc
26
31
  end
27
32
 
28
33
  term_def, alt = node.text.split(";")
29
34
  alt_xml = Nokogiri::XML::Text.new(alt, Nokogiri::XML::Document.new)
30
35
  converted_alt = Stepmod::Utils::Converters::Synonym.new.convert(alt_xml)
31
- "=== #{treat_acronym(term_def)}\n\n#{converted_alt}"
32
- end
33
-
34
- private
35
-
36
- def treat_acronym(term_def)
37
- return term_def.strip if term_def !~ /.+\(.+?\)$/
38
36
 
39
- _, term_text, term_acronym = term_def.match(/(.+?)(\(.+\))$/).to_a
40
- "#{term_text.strip}\nalt:[#{term_acronym.gsub(/\(|\)/, '')}]"
37
+ Stepmod::Utils::Term.from_h(
38
+ "definition" => term_def,
39
+ "synonyms" => [converted_alt],
40
+ ).to_mn_adoc
41
41
  end
42
42
  end
43
43
 
@@ -14,7 +14,7 @@ module Stepmod
14
14
  # <<~TEXT
15
15
  # === #{node['name'].strip}
16
16
 
17
- # <STEP module> #{treat_children(node, state).strip}
17
+ # <ISO 10303 application module> #{treat_children(node, state).strip}
18
18
  # TEXT
19
19
  end
20
20
  end
@@ -17,6 +17,7 @@ require "stepmod/utils/converters/term"
17
17
  require "stepmod/utils/converters/synonym"
18
18
  require "stepmod/utils/converters/uof"
19
19
  require "stepmod/utils/converters/figure"
20
+ require "stepmod/utils/cleaner"
20
21
 
21
22
  require "reverse_adoc/converters/a"
22
23
  require "reverse_adoc/converters/blockquote"
@@ -56,7 +57,7 @@ module Stepmod
56
57
  options)
57
58
  return "" unless result
58
59
 
59
- ReverseAdoc.cleaner.tidy(result.dup)
60
+ Stepmod::Utils::Cleaner.new.tidy(result.dup)
60
61
  end
61
62
  end
62
63
  end
@@ -0,0 +1,38 @@
1
+ require "glossarist"
2
+
3
+ module Stepmod
4
+ module Utils
5
+ class Term < Glossarist::LocalizedConcept
6
+ # Term acronym
7
+ attr_accessor :acronym
8
+
9
+ def to_mn_adoc
10
+ mn_adoc = ["=== #{definition}"]
11
+ mn_adoc << "\nalt:[#{acronym}]" if acronym
12
+ mn_adoc << "\n\n#{designations.join(", ")}" if designations&.any?
13
+
14
+ mn_adoc.join
15
+ end
16
+
17
+ class << self
18
+ def from_h(hash)
19
+ _, definition, acronym = treat_acronym(hash["definition"])
20
+
21
+ hash["definition"] = definition
22
+ hash["acronym"] = acronym.gsub(/\(|\)/, "") if acronym
23
+ hash["designations"] = hash["synonyms"]
24
+
25
+ super(hash.reject { |k, _| k == "synonyms" })
26
+ end
27
+
28
+ private
29
+
30
+ def treat_acronym(term_def)
31
+ return [nil, term_def.strip, nil] unless term_def.match?(/.+\(.+?\)$/)
32
+
33
+ term_def.match(/(.+?)(\(.+\))$/).to_a
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -15,24 +15,25 @@ module Stepmod
15
15
 
16
16
  attr_reader :stepmod_path,
17
17
  :stepmod_dir,
18
+ :index_path,
18
19
  :general_concepts,
19
20
  :resource_concepts,
20
21
  :parsed_bibliography,
21
22
  :encountered_terms,
22
- :cvs_mode,
23
23
  :part_concepts,
24
24
  :part_resources,
25
25
  :part_modules,
26
26
  :stdout
27
27
 
28
- def self.call(stepmod_dir, stdout = $stdout)
29
- new(stepmod_dir, stdout).call
28
+ def self.call(stepmod_dir, index_path, stdout = $stdout)
29
+ new(stepmod_dir, index_path, stdout).call
30
30
  end
31
31
 
32
- def initialize(stepmod_dir, stdout)
32
+ def initialize(stepmod_dir, index_path, stdout)
33
33
  @stdout = stdout
34
34
  @stepmod_dir = stepmod_dir
35
35
  @stepmod_path = Pathname.new(stepmod_dir).realpath
36
+ @index_path = Pathname.new(index_path).to_s
36
37
  @general_concepts = Glossarist::Collection.new
37
38
  @resource_concepts = Glossarist::Collection.new
38
39
  @parsed_bibliography = []
@@ -58,28 +59,10 @@ module Stepmod
58
59
  end
59
60
 
60
61
  def call
61
- # If we are using the stepmod CVS repository, provide the revision number per file
62
- @cvs_mode = if Dir.exists?(stepmod_path.join("CVS"))
63
- require "ptools"
64
- # ptools provides File.which
65
- File.which("cvs")
66
- end
67
-
68
62
  log "INFO: STEPmod directory set to #{stepmod_dir}."
69
-
70
- if cvs_mode
71
- log "INFO: STEPmod directory is a \
72
- CVS repository and will detect revisions."
73
- log "INFO: [CVS] Detecting file revisions can be slow, \
74
- please be patient!"
75
- else
76
- log "INFO: STEPmod directory is not a CVS repository, \
77
- skipping revision detection."
78
- end
79
-
80
63
  log "INFO: Detecting paths..."
81
64
 
82
- repo_index = Nokogiri::XML(File.read(stepmod_path.join("repository_index.xml"))).root
65
+ repo_index = Nokogiri::XML(File.read(@index_path)).root
83
66
 
84
67
  files = []
85
68
 
@@ -159,24 +142,15 @@ module Stepmod
159
142
  next
160
143
  end
161
144
 
162
- revision_string = "\n// CVS: revision not detected"
163
- if cvs_mode
164
- # Run `cvs status` to find out version
165
-
166
- log "INFO: Detecting CVS revision..."
167
- Dir.chdir(stepmod_path) do
168
- status = `cvs status #{fpath}`
169
-
170
- unless status.empty?
171
- working_rev = status.split(/\n/).grep(/Working revision:/)
172
- .first.match(/revision:\s+(.+)$/)[1]
173
- repo_rev = status.split(/\n/).grep(/Repository revision:/)
174
- .first.match(/revision:\t(.+)\t/)[1]
175
- log "INFO: CVS working rev (#{working_rev}), \
176
- repo rev (#{repo_rev})"
177
- revision_string = "\n// CVS working rev: (#{working_rev}), repo rev (#{repo_rev})\n" +
178
- "// CVS: revision #{working_rev == repo_rev ? 'up to date' : 'differs'}"
179
- end
145
+ revision_string = ""
146
+
147
+ # Run `cvs status` to find out version
148
+ log "INFO: Detecting Git SHA..."
149
+ Dir.chdir(stepmod_path) do
150
+ git_sha = `git rev-parse HEAD`
151
+
152
+ unless git_sha.empty?
153
+ revision_string = "\n// Git: SHA #{git_sha}"
180
154
  end
181
155
  end
182
156
 
@@ -1,5 +1,5 @@
1
1
  module Stepmod
2
2
  module Utils
3
- VERSION = "0.3.12".freeze
3
+ VERSION = "0.3.16".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stepmod-utils
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.12
4
+ version: 0.3.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-31 00:00:00.000000000 Z
11
+ date: 2022-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -213,16 +213,16 @@ files:
213
213
  - lib/stepmod/utils/smrl_resource_converter.rb
214
214
  - lib/stepmod/utils/stepmod_definition_converter.rb
215
215
  - lib/stepmod/utils/stepmod_file_annotator.rb
216
+ - lib/stepmod/utils/term.rb
216
217
  - lib/stepmod/utils/terms_extractor.rb
217
218
  - lib/stepmod/utils/version.rb
218
- - migrating_from_cvs.adoc
219
219
  - resource_example.xml
220
220
  - stepmod-utils.gemspec
221
221
  homepage: https://github.com/metanorma/stepmod-utils
222
222
  licenses:
223
223
  - BSD-2-Clause
224
224
  metadata: {}
225
- post_install_message:
225
+ post_install_message:
226
226
  rdoc_options: []
227
227
  require_paths:
228
228
  - lib
@@ -237,8 +237,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
237
237
  - !ruby/object:Gem::Version
238
238
  version: '0'
239
239
  requirements: []
240
- rubygems_version: 3.2.22
241
- signing_key:
240
+ rubygems_version: 3.0.3.1
241
+ signing_key:
242
242
  specification_version: 4
243
243
  summary: Stepmod-utils is a toolkit that works on STEPmod data.
244
244
  test_files: []
@@ -1,190 +0,0 @@
1
- = STEPmod CVS to Git import
2
-
3
- == Purpose
4
-
5
- The `cvs/` submodule is a CSV import of STEPmod files from the CVS server hosted at Boost Conseil.
6
-
7
- The goal is to import the CSV-managed files in a way useable via Git, with full history information.
8
-
9
- This guide is used as reference for the usage of `cvs-fast-import`:
10
- https://oitofelix.github.io/article-savannah-cvs-to-git-migration/
11
-
12
-
13
- == Strategy to import
14
-
15
- Cloning a remote CVS repository while importing is super slow,
16
- especially for a large repository like STEPmod.
17
-
18
- We have tested and settled on these steps:
19
-
20
- . Maintain a local `rsync` copy of the CVS repository.
21
- . Resolve all names from the CVS repository (CVS only stores UNIX usernames, in Git are names and emails) using `cvs-fast-import`.
22
- . Run `cvs-fast-import` to import the CVS repository into the `iso-10303-stepmod-cvs` Git repo.
23
-
24
-
25
- == Creating the `rsync` clone of the CVS repository
26
-
27
- [source,sh]
28
- ----
29
- rsync -avrPz -e ssh ronald@cvs.boost-lab.net:/stepmod/ stepmod-rsync/
30
- ----
31
-
32
-
33
- == Install cvs-fast-export
34
-
35
- `cvs-fast-export` only works on Linux.
36
- Run it on Ubuntu with the `rsync`'ed CVS directory.
37
-
38
- Install:
39
- [source,sh]
40
- ----
41
- $ apt-get -y install cvs-fast-export
42
- ----
43
-
44
- == Getting all users for email mapping
45
-
46
- Find all authors in the CVS repository using `cvs-fast-export -a`.
47
- It is much faster than using the equivalent CVS command to list all authors.
48
-
49
- [source,sh]
50
- ----
51
- $ find stepmod-rsync -type f | cvs-fast-export -a
52
- ----
53
-
54
-
55
- == Create fast-import file for Git
56
-
57
- After all authors are mapped, run `cvs-fast-export` to create
58
- the import file.
59
-
60
- [source,sh]
61
- ----
62
- $ find stepmod-rsync -type f | cvs-fast-export -A author-map.txt > fast-import-file
63
- ----
64
-
65
- == Perform the Git fast-import
66
-
67
- Once the fast-import file is created, we can perform the Git import.
68
-
69
- [source,sh]
70
- ----
71
- $ cd iso-10303-stepmod-cvs
72
- $ git fast-import < ../fast-import-file
73
- ----
74
-
75
-
76
- == Upload the new Git repo
77
-
78
- [source,sh]
79
- ----
80
- git push --all && git push --tags
81
- ----
82
-
83
-
84
- == DEPRECATED steps using `git cvsimport` (do not use, it won't work)
85
-
86
- === General
87
-
88
- https://stackoverflow.com/questions/11362676/how-to-import-and-keep-updated-a-cvs-repository-in-git[This StackOverflow post]
89
- describes steps for using `git cvsimport`.
90
-
91
- Originally the `git cvsimport` tool was chosen since it is part of
92
- `git`. However, it utilizes a deprecated/unmaintained tool called
93
- `cvsps`. The latest `cvsps` is version 3, but only version 2 is
94
- compatible with `git cvsimport`.
95
-
96
- In addition, the `cvsps` tool is maintained by the maintainer
97
- of `cvs-fast-import`, and is no longer updated.
98
- Eventually `cvs-fast-import` is used instead.
99
-
100
- WARNING: This command completely fails
101
- on this repository because it is too large and complex.
102
-
103
-
104
- === Setup
105
-
106
- On macOS, run the following commands to setup for running the import. The `git` executable must be installed.
107
-
108
- Install `cvsps` version 2.
109
-
110
- NOTE: The steps from the StackOverflow of installing `cvsps` no longer work.
111
-
112
- [source,sh]
113
- ----
114
- $ brew tap Frizlab/Perso
115
- # ==> Tapping frizlab/perso
116
- # Cloning into '/usr/local/Homebrew/Library/Taps/frizlab/homebrew-perso'...
117
- # remote: Enumerating objects: 123, done.
118
- # remote: Total 123 (delta 0), reused 0 (delta 0), pack-reused 123
119
- # Receiving objects: 100% (123/123), 19.08 KiB | 91.00 KiB/s, done.
120
- # Resolving deltas: 100% (43/43), done.
121
- # Tapped 1 cask and 10 formulae (38 files, 60.5KB).
122
-
123
- $ brew install cvsps@2
124
- # ==> Installing cvsps@2 from frizlab/perso
125
- # Warning: A newer Command Line Tools release is available.
126
- # Update them from Software Update in System Preferences or
127
- # https://developer.apple.com/download/more/.
128
- # ==> Downloading https://deb.debian.org/debian/pool/main/c/cvsps/cvsps_2.1.orig.tar.gz
129
- ######################################################################## 100.0%
130
- # ==> make all
131
- # ==> make install prefix=/usr/local/Cellar/cvsps@2/2.1
132
- # 🍺 /usr/local/Cellar/cvsps@2/2.1: 7 files, 124.6KB, built in 6 seconds
133
- ----
134
-
135
- Verify it is installed:
136
- [source,sh]
137
- ----
138
- $ cvsps -v
139
- # Can't open CVS/Root
140
- # cannot determine CVSROOT
141
- ----
142
-
143
- ////
144
- == Checkout the CVS repository
145
-
146
- First set the `CVSROOT` and `CVS_RSH` variables.
147
-
148
- [source,sh]
149
- ----
150
- export CVSROOT=:ext:ronald@cvs.boost-lab.net:/stepmod
151
- export CVS_RSH=ssh
152
- cvs checkout stepmod
153
- # => stepmod/ is created in $PWD
154
- ----
155
- ////
156
-
157
-
158
- === Run the import
159
-
160
- Run the import from CVS to Git.
161
-
162
- Go to the directory that will carry the target Git repository.
163
-
164
- Run `git cvsimport`.
165
-
166
- [source,sh]
167
- ----
168
- # Importing from remote
169
- $ export CVSROOT=:ext:ronald@cvs.boost-lab.net:/stepmod
170
- $ export CVS_RSH=ssh
171
- $ git cvsimport -C iso-10303-stepmod-cvs -r cvs -k -v -d $CVSROOT stepmod
172
-
173
- # Importing from local rsync'ed copy
174
- $ export CVSROOT=$(pwd)/stepmod-rsync
175
- $ git cvsimport -C iso-10303-stepmod-cvs -r cvs -k -v -d $CVSROOT stepmod
176
- ----
177
-
178
- WARNING: TLDR. Technically this should work, but I ran into a `cvsps cannot allocate memory` error with 64GB of RAM, and not even completing the clone after 24 hours. So I gave up and switched to local. And local still takes a long time with tons of error messages. `cvs-fast-import` only takes 5-10 minutes to import.
179
-
180
-
181
- === Updating the CVS import
182
-
183
- Run `git cvsimport` to synchronize the Git repo using updated data from CVS.
184
-
185
- [source,sh]
186
- ----
187
- $ git cvsimport
188
- ----
189
-
190
-