@@ -271,155 +271,6 @@ def revision_header(last, release_date, release_datetime = nil, branch = nil, ti
271271 code
272272 end
273273
274- class SVN < self
275- register ( ".svn" )
276- COMMAND = ENV [ 'SVN' ] || 'svn'
277-
278- def self . revision_name ( rev )
279- "r#{ rev } "
280- end
281-
282- def _get_revisions ( path , srcdir = nil )
283- if srcdir and self . class . local_path? ( path )
284- path = File . join ( srcdir , path )
285- end
286- if srcdir
287- info_xml = IO . pread ( %W" #{ COMMAND } info --xml #{ srcdir } " )
288- info_xml = nil unless info_xml [ /<url>(.*)<\/ url>/ , 1 ] == path . to_s
289- end
290- info_xml ||= IO . pread ( %W" #{ COMMAND } info --xml #{ path } " )
291- _ , last , _ , changed , _ = info_xml . split ( /revision="(\d +)"/ )
292- modified = info_xml [ /<date>([^<>]*)/ , 1 ]
293- branch = info_xml [ %r'<relative-url>\^ /(?:branches/|tags/)?([^<>]+)' , 1 ]
294- [ Integer ( last ) , Integer ( changed ) , modified , branch ]
295- end
296-
297- def self . search_root ( path )
298- return unless local_path? ( path )
299- parent = File . realpath ( path )
300- begin
301- parent = File . dirname ( wkdir = parent )
302- return wkdir if File . directory? ( wkdir + "/.svn" )
303- end until parent == wkdir
304- end
305-
306- def get_info
307- @info ||= IO . pread ( %W" #{ COMMAND } info --xml #{ @srcdir } " )
308- end
309-
310- def url
311- @url ||= begin
312- url = get_info [ /<root>(.*)<\/ root>/ , 1 ]
313- @url = URI . parse ( url +"/" ) if url
314- end
315- end
316-
317- def wcroot
318- @wcroot ||= begin
319- info = get_info
320- @wcroot = info [ /<wcroot-abspath>(.*)<\/ wcroot-abspath>/ , 1 ]
321- @wcroot ||= self . class . search_root ( @srcdir )
322- end
323- end
324-
325- def branch ( name )
326- return trunk if name == "trunk"
327- url + "branches/#{ name } "
328- end
329-
330- def tag ( name )
331- url + "tags/#{ name } "
332- end
333-
334- def trunk
335- url + "trunk"
336- end
337- alias master trunk
338-
339- def branch_list ( pat )
340- IO . popen ( %W" #{ COMMAND } ls #{ branch ( '' ) } " ) do |f |
341- f . each do |line |
342- line . chomp!
343- line . chomp! ( '/' )
344- yield ( line ) if File . fnmatch? ( pat , line )
345- end
346- end
347- end
348-
349- def grep ( pat , tag , *files , &block )
350- cmd = %W" #{ COMMAND } cat "
351- files . map! { |n | File . join ( tag , n ) } if tag
352- set = block . binding . eval ( "proc {|match| $~ = match}" )
353- IO . popen ( [ cmd , *files ] ) do |f |
354- f . grep ( pat ) do |s |
355- set [ $~]
356- yield s
357- end
358- end
359- end
360-
361- def export ( revision , url , dir , keep_temp = false )
362- if @srcdir and ( rootdir = wcroot )
363- srcdir = File . realpath ( @srcdir )
364- rootdir << "/"
365- if srcdir . start_with? ( rootdir )
366- subdir = srcdir [ rootdir . size ..-1 ]
367- subdir = nil if subdir . empty?
368- FileUtils . mkdir_p ( svndir = dir +"/.svn" )
369- FileUtils . ln_s ( Dir . glob ( rootdir +"/.svn/*" ) , svndir )
370- system ( COMMAND , "-q" , "revert" , "-R" , subdir || "." , :chdir => dir ) or return false
371- FileUtils . rm_rf ( svndir ) unless keep_temp
372- if subdir
373- tmpdir = Dir . mktmpdir ( "tmp-co." , "#{ dir } /#{ subdir } " )
374- File . rename ( tmpdir , tmpdir = "#{ dir } /#{ File . basename ( tmpdir ) } " )
375- FileUtils . mv ( Dir . glob ( "#{ dir } /#{ subdir } /{.[^.]*,..?*,*}" ) , tmpdir )
376- begin
377- Dir . rmdir ( "#{ dir } /#{ subdir } " )
378- end until ( subdir = File . dirname ( subdir ) ) == '.'
379- FileUtils . mv ( Dir . glob ( "#{ tmpdir } /#{ subdir } /{.[^.]*,..?*,*}" ) , dir )
380- Dir . rmdir ( tmpdir )
381- end
382- return self
383- end
384- end
385- IO . popen ( %W" #{ COMMAND } export -r #{ revision } #{ url } #{ dir } " ) do |pipe |
386- pipe . each { |line | /^A/ =~ line or yield line }
387- end
388- self if $?. success?
389- end
390-
391- def after_export ( dir )
392- super
393- FileUtils . rm_rf ( dir +"/.svn" )
394- end
395-
396- def branch_beginning ( url )
397- # `--limit` of svn-log is useless in this case, because it is
398- # applied before `--search`.
399- rev = IO . pread ( %W[ #{ COMMAND } log --xml
400- --search=matz --search-and=has\ started
401- -- #{ url } /version.h] ) [ /<logentry\s +revision="(\d +)"/m , 1 ]
402- rev . to_i if rev
403- end
404-
405- def export_changelog ( url = '.' , from = nil , to = nil , _path = nil , path : _path )
406- range = [ to || 'HEAD' , ( from ? from +1 : branch_beginning ( url ) ) ] . compact . join ( ':' )
407- IO . popen ( { 'TZ' => 'JST-9' , 'LANG' => 'C' , 'LC_ALL' => 'C' } ,
408- %W" #{ COMMAND } log -r#{ range } #{ url } " ) do |r |
409- IO . copy_stream ( r , path )
410- end
411- end
412-
413- def commit
414- args = %W" #{ COMMAND } commit "
415- if dryrun?
416- VCS . dump ( args , "commit: " )
417- return true
418- end
419- system ( *args )
420- end
421- end
422-
423274 class GIT < self
424275 register ( ".git" ) do |path , dir |
425276 SAFE_DIRECTORIES ||=
@@ -533,15 +384,6 @@ def self.short_revision(rev)
533384 rev [ 0 , 10 ]
534385 end
535386
536- def revision_handler ( rev )
537- case rev
538- when Integer
539- SVN
540- else
541- super
542- end
543- end
544-
545387 def without_gitconfig
546388 envs = ( %w' HOME XDG_CONFIG_HOME ' + ENV . keys . grep ( /\A GIT_/ ) ) . each_with_object ( { } ) do |v , h |
547389 h [ v ] = ENV . delete ( v )
@@ -616,7 +458,7 @@ def grep(pat, tag, *files, &block)
616458
617459 def export ( revision , url , dir , keep_temp = false )
618460 system ( COMMAND , "clone" , "-c" , "advice.detachedHead=false" , "-s" , ( @srcdir || '.' ) . to_s , "-b" , url , dir ) or return
619- ( Integer === revision ? GITSVN : GIT ) . new ( File . expand_path ( dir ) )
461+ GIT . new ( File . expand_path ( dir ) )
620462 end
621463
622464 def branch_beginning ( url )
@@ -626,22 +468,15 @@ def branch_beginning(url)
626468 end
627469
628470 def export_changelog ( url = '@' , from = nil , to = nil , _path = nil , path : _path , base_url : nil )
629- svn = nil
630471 from , to = [ from , to ] . map do |rev |
631472 rev or next
632- if Integer === rev
633- svn = true
634- rev = cmd_read ( { 'LANG' => 'C' , 'LC_ALL' => 'C' } ,
635- %W" #{ COMMAND } log -n1 --format=format:%H " <<
636- "--grep=^ *git-svn-id: .*@#{ rev } " )
637- end
638473 rev unless rev . empty?
639474 end
640475 unless ( from && /./ . match ( from ) ) or ( ( from = branch_beginning ( url ) ) && /./ . match ( from ) )
641476 warn "no starting commit found" , uplevel : 1
642477 from = nil
643478 end
644- if svn or system ( *%W" #{ COMMAND } fetch origin refs/notes/commits:refs/notes/commits " ,
479+ if system ( *%W" #{ COMMAND } fetch origin refs/notes/commits:refs/notes/commits " ,
645480 chdir : @srcdir , exception : false )
646481 system ( *%W" #{ COMMAND } fetch origin refs/notes/log-fix:refs/notes/log-fix " ,
647482 chdir : @srcdir , exception : false )
@@ -655,21 +490,17 @@ def export_changelog(url = '@', from = nil, to = nil, _path = nil, path: _path,
655490 arg = [ "--since=25 Dec 00:00:00" , to ]
656491 end
657492 writer =
658- if svn
659- format_changelog_as_svn ( path , arg )
660- else
661- if base_url == true
662- remote , = upstream
663- if remote &&= cmd_read ( env , %W[ #{ COMMAND } remote get-url --no-push #{ remote } ] )
664- remote . chomp!
665- # hack to redirect git.r-l.o to github
666- remote . sub! ( /\A git@git\. ruby-lang\. org:/ , '[email protected] :ruby/' ) 667- remote . sub! ( /\A git@(.*?):(.*?)(?:\. git)?\z / , 'https://\1/\2/commit/' )
668- end
669- base_url = remote
493+ if base_url == true
494+ remote , = upstream
495+ if remote &&= cmd_read ( env , %W[ #{ COMMAND } remote get-url --no-push #{ remote } ] )
496+ remote . chomp!
497+ # hack to redirect git.r-l.o to github
498+ remote . sub! ( /\A git@git\. ruby-lang\. org:/ , '[email protected] :ruby/' ) 499+ remote . sub! ( /\A git@(.*?):(.*?)(?:\. git)?\z / , 'https://\1/\2/commit/' )
670500 end
671- format_changelog ( path , arg , base_url )
501+ base_url = remote
672502 end
503+ format_changelog ( path , arg , base_url )
673504 if !path or path == '-'
674505 writer [ $stdout]
675506 else
@@ -774,27 +605,6 @@ def format_changelog(path, arg, base_url = nil)
774605 end
775606 end
776607
777- def format_changelog_as_svn ( path , arg )
778- cmd = %W" #{ COMMAND } log --topo-order --no-notes -z --format=%an%n%at%n%B "
779- cmd . concat ( arg )
780- proc do |w |
781- sep = "-" *72 + "\n "
782- w . print sep
783- cmd_pipe ( cmd ) do |r |
784- while s = r . gets ( "\0 " )
785- s . chomp! ( "\0 " )
786- author , time , s = s . split ( "\n " , 3 )
787- s . sub! ( /\n \n git-svn-id: .*@(\d +) .*\n \Z / , '' )
788- rev = $1
789- time = Time . at ( time . to_i ) . getlocal ( "+09:00" ) . strftime ( "%F %T %z (%a, %d %b %Y)" )
790- lines = s . count ( "\n " ) + 1
791- lines = "#{ lines } line#{ lines == 1 ? '' : 's' } "
792- w . print "r#{ rev } | #{ author } | #{ time } | #{ lines } \n \n " , s , "\n " , sep
793- end
794- end
795- end
796- end
797-
798608 def upstream
799609 ( branch = cmd_read ( %W" #{ COMMAND } symbolic-ref --short HEAD " ) ) . chomp!
800610 ( upstream = cmd_read ( %W" #{ COMMAND } branch --list --format=%(upstream) #{ branch } " ) ) . chomp!
@@ -826,46 +636,6 @@ def commit(opts = {})
826636 end
827637 end
828638
829- class GITSVN < GIT
830- def self . revision_name ( rev )
831- SVN . revision_name ( rev )
832- end
833-
834- def last_changed_revision
835- rev = cmd_read ( %W" #{ COMMAND } svn info " +[ STDERR => [ :child , :out ] ] ) [ /^Last Changed Rev: (\d +)/ , 1 ]
836- com = cmd_read ( %W" #{ COMMAND } svn find-rev r#{ rev } " ) . chomp
837- return rev , com
838- end
839-
840- def commit ( opts = { } )
841- rev , com = last_changed_revision
842- head = cmd_read ( %W" #{ COMMAND } symbolic-ref --short HEAD " ) . chomp
843-
844- commits = cmd_read ( [ COMMAND , "log" , "--reverse" , "--format=%H %ae %ce" , "#{ com } ..@" ] , "rb" ) . split ( "\n " )
845- commits . each_with_index do |l , i |
846- r , a , c = l . split ( ' ' )
847- dcommit = [ COMMAND , "svn" , "dcommit" ]
848- dcommit . insert ( -2 , "-n" ) if dryrun?
849- dcommit << "--add-author-from" unless a == c
850- dcommit << r
851- system ( *dcommit ) or return false
852- system ( COMMAND , "checkout" , head ) or return false
853- system ( COMMAND , "rebase" ) or return false
854- end
855-
856- if rev
857- old = [ cmd_read ( %W" #{ COMMAND } log -1 --format=%H " ) . chomp ]
858- old << cmd_read ( %W" #{ COMMAND } svn reset -r#{ rev } " ) [ /^r#{ rev } = (\h +)/ , 1 ]
859- 3 . times do
860- sleep 2
861- system ( *%W" #{ COMMAND } pull --no-edit --rebase " )
862- break unless old . include? ( cmd_read ( %W" #{ COMMAND } log -1 --format=%H " ) . chomp )
863- end
864- end
865- true
866- end
867- end
868-
869639 class Null < self
870640 def get_revisions ( path , srcdir = nil )
871641 @modified ||= Time . now - 10
0 commit comments