lib/svn2git/migration.rb in mss-svn2git-1.2.4.1 vs lib/svn2git/migration.rb in mss-svn2git-1.3.0
- old
+ new
@@ -30,10 +30,11 @@
options[:verbose] = false
options[:rootistrunk] = false
options[:trunk] = 'trunk'
options[:branches] = 'branches'
options[:tags] = 'tags'
+ options[:exclude] = []
if File.exists?(File.expand_path(DEFAULT_AUTHORS_FILE))
options[:authors] = DEFAULT_AUTHORS_FILE
end
@@ -50,21 +51,39 @@
end
opts.on('--branches BRANCHES_PATH', 'Subpath to branches from repository URL (default: branches)') do |branches|
options[:branches] = branches
end
-
opts.on('--tags TAGS_PATH', 'Subpath to tags from repository URL (default: tags)') do |tags|
options[:tags] = tags
end
+ opts.on('--rootistrunk', 'Use this if the root level of the repo is equivalent to the trunk and there are no tags or branches') do
+ options[:rootistrunk] = true
+ options[:trunk] = nil
+ options[:branches] = nil
+ options[:tags] = nil
+ end
+
+ opts.on('--notrunk', 'Do not import anything from trunk') do
+ options[:trunk] = nil
+ end
+
+ opts.on('--nobranches', 'Do not try to import any branches') do
+ options[:branches] = nil
+ end
+
+ opts.on('--notags', 'Do not try to import any tags') do
+ options[:tags] = nil
+ end
+
opts.on('--authors AUTHORS_FILE', "Path to file containing svn-to-git authors mapping (default: #{DEFAULT_AUTHORS_FILE})") do |authors|
options[:authors] = authors
end
- opts.on('--rootistrunk', 'Use this if the root level of the repo is equivalent to the trunk and there are no tags or branches') do
- options[:rootistrunk] = true
+ opts.on('--exclude REGEX', 'Specify a Perl regular expression to filter paths when fetching; can be used multiple times') do |regex|
+ options[:exclude] << regex
end
opts.on('-v', '--verbose', 'Be verbose in logging -- useful for debugging issues') do
options[:verbose] = true
end
@@ -89,27 +108,40 @@
trunk = @options[:trunk]
branches = @options[:branches]
tags = @options[:tags]
rootistrunk = @options[:rootistrunk]
authors = @options[:authors]
+ exclude = @options[:exclude]
cmd = %w{git svn init --no-metadata}
if rootistrunk
# Non-standard repository layout. The repository root is effectively 'trunk.'
cmd << "--trunk=#{@url}"
-
else
# Add each component to the command that was passed as an argument.
cmd << "--trunk=#{trunk}" unless trunk.nil?
cmd << "--tags=#{tags}" unless tags.nil?
cmd << "--branches=#{branches}" unless branches.nil?
-
cmd << @url
end
run_command(cmd)
run_command("git config svn.authorsfile #{authors}") if authors
- run_command("git svn fetch")
+
+ cmd = %w{git svn fetch}
+ unless exclude.empty?
+ # Add exclude paths to the command line; some versions of git support
+ # this for fetch only, later also for init.
+ regex = []
+ unless rootistrunk
+ regex << "#{trunk}[/]" unless trunk.nil?
+ regex << "#{tags}[/][^/]+[/]" unless tags.nil?
+ regex << "#{branches}[/][^/]+[/]" unless branches.nil?
+ end
+ regex = '^(?:' + regex.join('|') + ')(?:' + exclude.join('|') + ')'
+ cmd << "'--ignore-paths=#{regex}'"
+ end
+ run_command(cmd)
get_branches
end
def get_branches