build-tool 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (149) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +28 -1
  3. data/Manifest.txt +91 -52
  4. data/README.txt +63 -0
  5. data/Rakefile +20 -23
  6. data/bin/build-tool +53 -0
  7. data/lib/build-tool.rb +7 -0
  8. data/lib/build-tool/GUI.rb +360 -0
  9. data/lib/build-tool/application.rb +84 -0
  10. data/lib/build-tool/build-system/autoconf.rb +60 -0
  11. data/lib/build-tool/build-system/base.rb +142 -0
  12. data/lib/build-tool/build-system/cmake.rb +119 -0
  13. data/lib/build-tool/build-system/custom.rb +115 -0
  14. data/lib/build-tool/build-system/qt.rb +113 -0
  15. data/lib/build-tool/cfg/lexer.rb +558 -0
  16. data/lib/build-tool/cfg/lexer.rex +248 -0
  17. data/lib/build-tool/cfg/lexer_base.rb +82 -0
  18. data/lib/build-tool/cfg/node.rb +94 -0
  19. data/lib/build-tool/cfg/parser.rb +871 -0
  20. data/lib/build-tool/cfg/parser.y +279 -0
  21. data/lib/build-tool/cfg/visitor.rb +471 -0
  22. data/lib/build-tool/commands.rb +639 -0
  23. data/lib/build-tool/commands/build.rb +120 -0
  24. data/lib/build-tool/commands/configure.rb +73 -0
  25. data/lib/build-tool/commands/ctags.rb +46 -0
  26. data/lib/build-tool/commands/environments.rb +29 -0
  27. data/lib/build-tool/commands/environments/list.rb +37 -0
  28. data/lib/build-tool/commands/environments/set.rb +33 -0
  29. data/lib/build-tool/commands/fetch.rb +50 -0
  30. data/lib/build-tool/commands/files.rb +73 -0
  31. data/lib/build-tool/commands/help.rb +22 -0
  32. data/lib/build-tool/commands/info.rb +48 -0
  33. data/lib/build-tool/commands/install.rb +56 -0
  34. data/lib/build-tool/commands/modules.rb +29 -0
  35. data/lib/build-tool/commands/modules/info.rb +75 -0
  36. data/lib/build-tool/commands/modules/list.rb +49 -0
  37. data/lib/build-tool/commands/modules/shell.rb +40 -0
  38. data/lib/build-tool/commands/rebase.rb +46 -0
  39. data/lib/build-tool/commands/recipes.rb +32 -0
  40. data/lib/build-tool/commands/recipes/info.rb +46 -0
  41. data/lib/build-tool/commands/recipes/install.rb +184 -0
  42. data/lib/build-tool/commands/recipes/list.rb +33 -0
  43. data/lib/build-tool/configuration.rb +115 -0
  44. data/lib/build-tool/environment.rb +119 -0
  45. data/lib/build-tool/errors.rb +9 -0
  46. data/lib/build-tool/module.rb +366 -0
  47. data/lib/build-tool/pluginbase.rb +43 -0
  48. data/lib/build-tool/recipe.rb +180 -0
  49. data/lib/build-tool/repository.rb +59 -0
  50. data/lib/build-tool/server.rb +43 -0
  51. data/lib/build-tool/singleton.rb +50 -0
  52. data/lib/build-tool/sshkey.rb +22 -0
  53. data/lib/build-tool/vcs/base.rb +105 -0
  54. data/lib/build-tool/vcs/git-svn.rb +154 -0
  55. data/lib/build-tool/vcs/git.rb +187 -0
  56. data/lib/build-tool/vcs/svn.rb +136 -0
  57. data/lib/mj/logging.rb +31 -0
  58. data/lib/mj/tools/ssh.rb +64 -0
  59. data/lib/{kde-build → mj/tools}/subprocess.rb +21 -16
  60. data/lib/mj/visitor.rb +21 -0
  61. data/recipes/kde/files/finish_installation.sh +16 -0
  62. data/recipes/kde/files/kde4.desktop +22 -0
  63. data/recipes/kde/files/xsession +89 -0
  64. data/recipes/kde/info.yaml +10 -0
  65. data/recipes/kde/recipe +585 -0
  66. data/recipes/kde/recipe-local +90 -0
  67. data/recipes/kde/settings.yaml +52 -0
  68. data/recipes/kde43/info.yaml +10 -0
  69. data/recipes/kde43/recipe +256 -0
  70. data/recipes/kde43/recipe-local +90 -0
  71. data/recipes/kde43/settings.yaml +32 -0
  72. data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/compile.sh +77 -0
  73. data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/configure.sh +70 -0
  74. data/recipes/kdeqt4.6/custom/qt/qtscriptgenerator/install.sh +39 -0
  75. data/recipes/kdeqt4.6/info.yaml +7 -0
  76. data/recipes/kdeqt4.6/recipe +155 -0
  77. data/recipes/kdeqt4.6/recipe-local +30 -0
  78. data/recipes/kdeqt4.6/settings.yaml +27 -0
  79. data/tags +745 -0
  80. data/tasks/genfiles.rake +28 -0
  81. data/tasks/rdoc.rake +34 -0
  82. data/tasks/rspec.rake +21 -0
  83. data/test.rb +28 -0
  84. data/test/commands/test_build.rb +29 -0
  85. data/test/test_build_system.rb +98 -0
  86. data/test/test_cli.rb +61 -0
  87. data/test/test_command.rb +175 -0
  88. data/test/test_configuration_parser.rb +542 -0
  89. data/test/test_environment.rb +82 -0
  90. data/test/test_helper.rb +39 -7
  91. data/test/test_module.rb +158 -0
  92. data/test/test_repository.rb +75 -0
  93. data/test/test_singleton.rb +51 -0
  94. data/test/test_ssh_key.rb +14 -0
  95. data/test/test_svn_parser.rb +28 -0
  96. data/test/test_vcs.rb +33 -0
  97. metadata +139 -90
  98. metadata.gz.sig +0 -0
  99. data/PostInstall.txt +0 -3
  100. data/TODO +0 -2
  101. data/bin/kde-build.rb +0 -21
  102. data/config/website.yml +0 -2
  103. data/config/website.yml.sample +0 -2
  104. data/lib/kde-build.rb +0 -18
  105. data/lib/kde-build/application.rb +0 -270
  106. data/lib/kde-build/build_system.rb +0 -28
  107. data/lib/kde-build/build_system/autoconf.rb +0 -108
  108. data/lib/kde-build/build_system/base.rb +0 -139
  109. data/lib/kde-build/build_system/cmake.rb +0 -94
  110. data/lib/kde-build/build_system/qtcopy.rb +0 -127
  111. data/lib/kde-build/command.rb +0 -42
  112. data/lib/kde-build/command/build.rb +0 -106
  113. data/lib/kde-build/command/compile.rb +0 -39
  114. data/lib/kde-build/command/configure.rb +0 -48
  115. data/lib/kde-build/command/ctags.rb +0 -41
  116. data/lib/kde-build/command/fetch.rb +0 -33
  117. data/lib/kde-build/command/help.rb +0 -71
  118. data/lib/kde-build/command/info.rb +0 -45
  119. data/lib/kde-build/command/install.rb +0 -39
  120. data/lib/kde-build/command/module_based.rb +0 -44
  121. data/lib/kde-build/command/rebase.rb +0 -50
  122. data/lib/kde-build/command/version.rb +0 -43
  123. data/lib/kde-build/configuration.rb +0 -209
  124. data/lib/kde-build/exception.rb +0 -6
  125. data/lib/kde-build/metaaid.rb +0 -18
  126. data/lib/kde-build/module.rb +0 -227
  127. data/lib/kde-build/module_configuration.rb +0 -107
  128. data/lib/kde-build/moduleregistry.rb +0 -85
  129. data/lib/kde-build/tools/ctags.rb +0 -59
  130. data/lib/kde-build/tools/logging.rb +0 -49
  131. data/lib/kde-build/tools/make.rb +0 -58
  132. data/lib/kde-build/tools/ssh.rb +0 -47
  133. data/lib/kde-build/vcs.rb +0 -28
  134. data/lib/kde-build/vcs/base.rb +0 -85
  135. data/lib/kde-build/vcs/git-svn.rb +0 -139
  136. data/lib/kde-build/vcs/git.rb +0 -121
  137. data/lib/kde-build/vcs/svn.rb +0 -102
  138. data/script/console +0 -10
  139. data/script/destroy +0 -14
  140. data/script/generate +0 -14
  141. data/script/txt2html +0 -71
  142. data/test.yaml.tmpl +0 -632
  143. data/test/test_kde-build.rb +0 -11
  144. data/test/test_vcs_svn.rb +0 -44
  145. data/website/index.html +0 -84
  146. data/website/index.txt +0 -59
  147. data/website/javascripts/rounded_corners_lite.inc.js +0 -285
  148. data/website/stylesheets/screen.css +0 -159
  149. data/website/template.html.erb +0 -50
@@ -0,0 +1,59 @@
1
+ require 'build-tool/errors'
2
+
3
+ module BuildTool
4
+
5
+ # Encapsulates a source code repository.
6
+ class Repository
7
+
8
+ # Repository name
9
+ attr_reader :name
10
+
11
+ # The server this repository is hosted
12
+ attr_accessor :server
13
+
14
+ # The relative path on the server
15
+ attr_accessor :path
16
+
17
+ # The relative path on the server
18
+ attr_accessor :user
19
+
20
+ # The associated ssh-key
21
+ attr_accessor :sshkey
22
+
23
+ # Create a repository
24
+ def initialize(name)
25
+ if name.nil?
26
+ raise StandardError, "The repository name has to be set"
27
+ end
28
+ @name = name
29
+ @server = nil
30
+ @sshkey = nil
31
+ end
32
+
33
+ def url
34
+ if !server
35
+ raise ConfigurationError, "No server specified for repository #{name}"
36
+ end
37
+ if !server.host
38
+ raise ConfigurationError, "No host specified for rserver #{server.name}"
39
+ end
40
+
41
+ url = server.host
42
+ if server.path
43
+ url = "#{url}/#{server.path}"
44
+ end
45
+ if user
46
+ url = "#{user}@#{url}"
47
+ end
48
+ if server.protocol
49
+ url = "#{server.protocol}://#{url}"
50
+ end
51
+ if path
52
+ url = "#{url}/#{path}"
53
+ end
54
+ url
55
+ end
56
+
57
+ end # class Repository
58
+
59
+ end # module BuildTool
@@ -0,0 +1,43 @@
1
+ module BuildTool
2
+
3
+ class Server
4
+
5
+ # The host this repository is hosted
6
+ attr_accessor :host
7
+
8
+ # Repository name
9
+ attr_reader :name
10
+
11
+ # The relative path on the server
12
+ attr_accessor :path
13
+
14
+ # The protocol used to access the repository
15
+ attr_accessor :protocol
16
+
17
+ # Create a repository
18
+ def initialize(name)
19
+ if name.nil?
20
+ raise StandardError, "The server name has to be set"
21
+ end
22
+ @name = name
23
+ end
24
+
25
+ def url
26
+ if !host
27
+ raise ConfigurationError, "No host specified for server #{name}"
28
+ end
29
+
30
+ url = host
31
+ if protocol
32
+ url = "#{protocol}://#{url}"
33
+ end
34
+ if path
35
+ url = "#{url}/#{path}"
36
+ end
37
+ url
38
+ end
39
+
40
+ end # class Server
41
+
42
+
43
+ end # module BuildTool
@@ -0,0 +1,50 @@
1
+ module BuildTool
2
+
3
+ class Singleton
4
+
5
+ def self.inherited( child )
6
+ if child.superclass == Singleton
7
+ child.class_eval <<-EOS
8
+ def self.instance; instance_variable_get( "@instance" ); end
9
+ def self.instance=( x ); instance_variable_set( "@instance", x ); end
10
+ EOS
11
+ else
12
+ child.class_eval <<-EOS
13
+ def self.instance; superclass.instance; end
14
+ def self.instance=( x ); superclass.instance = x; end
15
+ EOS
16
+ end
17
+ child.instance_variable_set( "@instance", nil )
18
+ end
19
+
20
+ def initialize
21
+ if !self.class.instance.nil?
22
+ raise StandardError, "More than one instance of #{self.class} created!"
23
+ end
24
+ self.class.instance = self
25
+ end
26
+
27
+
28
+ def self.instance
29
+ raise StandardError, "No instance of #{self} created"
30
+ end
31
+
32
+ def destroy
33
+ cls = self.class
34
+ while cls.superclass != Singleton
35
+ cls = cls.superclass
36
+ end
37
+ cls.instance = nil
38
+ end
39
+
40
+ def instance
41
+ cls = self.class
42
+ while cls.superclass != Singleton
43
+ cls = cls.superclass
44
+ end
45
+ cls.instance
46
+ end
47
+
48
+ end
49
+
50
+ end # module BuildTool
@@ -0,0 +1,22 @@
1
+ module BuildTool
2
+ #
3
+ # Encapsulates a ssh key
4
+ #
5
+ class SshKey
6
+
7
+ def initialize(name, file = nil)
8
+ @name = name
9
+ @file = file
10
+ end
11
+
12
+ attr_reader :name
13
+
14
+ attr_accessor :file
15
+
16
+ def to_s
17
+ @file
18
+ end
19
+
20
+ end # class SshKey
21
+
22
+ end # module BuildTool
@@ -0,0 +1,105 @@
1
+ require 'mj/tools/subprocess.rb'
2
+
3
+ require 'build-tool/errors'
4
+
5
+ module BuildTool; module VCS
6
+
7
+ class BaseConfiguration
8
+
9
+ attr_reader :module
10
+
11
+ def initialize( mod = nil )
12
+ @module = mod
13
+ end
14
+
15
+ def remote_path
16
+ @module.remote_path
17
+ end
18
+
19
+ def repository
20
+ @module.repository
21
+ end
22
+
23
+ def local_path
24
+ @module.source_directory
25
+ end
26
+
27
+ def module
28
+ @module
29
+ end
30
+
31
+ end
32
+
33
+ #
34
+ # Base class for Version Control System implementations
35
+ #
36
+ class Base
37
+
38
+ class VcsError < BuildTool::Error; end
39
+
40
+ include MJ::Tools::SubProcess
41
+
42
+ # # Create a repository
43
+ def initialize( config )
44
+ @config = config
45
+ end
46
+
47
+ #
48
+ ### ATTRIBUTES
49
+ #
50
+ attr_reader :config
51
+
52
+ def local_path
53
+ local_path = @config.local_path
54
+ raise ConfigurationError, "#{self.class}.local_path not set" if local_path.nil?
55
+ local_path
56
+ end
57
+
58
+ def remote_path
59
+ remote_path = @config.remote_path
60
+ raise ConfigurationError, "#{self.class}.remote_path not set" if remote_path.nil?
61
+ remote_path
62
+ end
63
+
64
+ def repository
65
+ repository = @config.repository
66
+ raise ConfigurationError, "#{self.class}.repository not set" if repository.nil?
67
+ repository
68
+ end
69
+
70
+ #
71
+ ### METHODS
72
+ #
73
+
74
+ # checks if path exists and is a directory
75
+ def local_path_exist?
76
+ !local_path.nil? and File.exist? local_path and File.directory? local_path
77
+ end
78
+
79
+ def configure
80
+ logger.debug "VCS #{name} did not implement configure!"
81
+ end
82
+
83
+ #
84
+ ### VIRTUAL FUNCTIONS
85
+ #
86
+ for method in [
87
+ :checkedout?,
88
+ :clone,
89
+ :fetch,
90
+ :name ,
91
+ :rebase,
92
+ :fetching_supported?,
93
+ :[]=,
94
+ :[]
95
+ ] do
96
+ class_eval <<-EOS
97
+ def #{method}
98
+ raise NotImplementedError, "Method #{method} is not implemented for class #{self}"
99
+ end
100
+ EOS
101
+ end
102
+
103
+ end # class Base
104
+
105
+ end; end # module BuildTool::VCS
@@ -0,0 +1,154 @@
1
+ require 'build-tool/vcs/svn'
2
+ require 'build-tool/vcs/git'
3
+
4
+ module BuildTool; module VCS
5
+
6
+
7
+ class GitSvnConfiguration < GitConfiguration
8
+
9
+ def name
10
+ "git-svn"
11
+ end
12
+
13
+ attr_reader :externals
14
+
15
+ def initialize( mod = nil )
16
+ super( mod )
17
+ @externals = {}
18
+ end
19
+
20
+ def vcs( mod )
21
+ @module = mod
22
+ GitSvn.new( self )
23
+ end
24
+
25
+ def add_external( local, target )
26
+ @externals[local] = target
27
+ end
28
+
29
+ end
30
+
31
+ #
32
+ # Implementation for the git-svn version control system.
33
+ #
34
+ class GitSvn < Base
35
+
36
+ class GitSvnError < BuildTool::Error; end
37
+
38
+ def initialize( *args )
39
+ super( *args )
40
+ end
41
+
42
+ #
43
+ ### ATTRIBUTES
44
+ #
45
+ def name
46
+ "git-svn"
47
+ end
48
+
49
+ def fetching_supported?
50
+ true
51
+ end
52
+
53
+ #
54
+ ### METHOD
55
+ #
56
+
57
+ def checkedout?
58
+ return false if !local_path_exist?
59
+ if !Pathname.new( local_path ).join( ".git" ).exist?
60
+ raise Base::VcsError, "Checkout path #{local_path} is not a git repo!"
61
+ end
62
+ return true
63
+ end
64
+
65
+ def clone
66
+ if local_path_exist?
67
+ raise GitSvnError, "Failed to create repository at '#{local_path}': Path exists"
68
+ end
69
+ # Create the directory
70
+ FileUtils.mkdir_p( local_path ) if !$noop
71
+ # Init the repository
72
+ if 0 != ( git_svn "init #{repository.url}/#{remote_path}" )
73
+ raise GitSvnError, "Error while initializing the repo `git svn init '#{repository}/#{remote_path}'`: #{$?}"
74
+ end
75
+ fetch( "HEAD" )
76
+ end
77
+
78
+ def configure
79
+ git.configure
80
+ end
81
+
82
+ # Fetch from +repository+
83
+ #
84
+ # Initializes the local clone if it does not exist.
85
+ def fetch( revision = nil )
86
+ if !checkedout? and !$noop # Beware of looping
87
+ clone
88
+ end
89
+ if revision
90
+ cmd = "fetch -r#{revision}"
91
+ else
92
+ cmd = "fetch"
93
+ end
94
+ if ( rc = git_svn( cmd ) ) != 0
95
+ raise GitSvnError, "Error while fetching: #{rc}"
96
+ end
97
+ update_externals
98
+ end
99
+
100
+ def git
101
+ if @git.nil?
102
+ @git = Git.new( config )
103
+ end
104
+ @git
105
+ end
106
+
107
+ # Call git-svn with command
108
+ def git_svn( command, wd = local_path, &block )
109
+ rc = self.class.execute( "git svn " + command, wd, &block )
110
+ if rc != 0
111
+ raise GitSvnError, "git svn #{command || "" } failed with error code #{rc}";
112
+ end
113
+ rc
114
+ end
115
+
116
+ def rebase
117
+ git.git( "rebase git-svn" )
118
+ end
119
+
120
+ def update_externals
121
+ config.externals.each do |local, remote|
122
+ VCS::Svn::svn( "checkout #{remote}@HEAD #{local}", wd = local_path )
123
+ end
124
+ end
125
+
126
+ def[]( var )
127
+ case var
128
+
129
+ when 'external'
130
+ return @externals
131
+
132
+ else
133
+ # *TODO* raise correct exception
134
+ raise NotImplementedError, "#{var}"
135
+ end
136
+ end
137
+
138
+ def[]=( var, val )
139
+ case var
140
+
141
+ when 'external'
142
+ tmp = val.split( /#/ )
143
+ @externals[tmp[0]] = tmp[1]
144
+
145
+ else
146
+ # *TODO* raise correct exception
147
+ raise NotImplementedError, "#{var}"
148
+ end
149
+ end
150
+
151
+ end # class GitSvn
152
+
153
+
154
+ end; end # module BuildTool::VCS
@@ -0,0 +1,187 @@
1
+ require 'build-tool/vcs/base'
2
+ require 'build-tool/errors'
3
+
4
+ module BuildTool; module VCS
5
+
6
+ class GitError < BuildTool::Error; end
7
+
8
+ class GitConfiguration < BaseConfiguration
9
+
10
+ def name
11
+ "git"
12
+ end
13
+
14
+ attr_accessor :remote
15
+
16
+ def initialize( mod = nil )
17
+ super( mod )
18
+ @remote = {}
19
+ end
20
+
21
+ def vcs( mod )
22
+ @module = mod
23
+ Git.new( self )
24
+ end
25
+
26
+ def track_remote
27
+ rc = self.module.remote_path.split('/')
28
+ # If there is only one string we assume it is the branch name from
29
+ # origin
30
+ return "origin" if rc.length == 1
31
+ return rc[0]
32
+ end
33
+
34
+ def track_branch
35
+ rc = self.module.remote_path.split('/')
36
+ # If there is only one string we assume it is the branch name from
37
+ # origin
38
+ return rc[0] if rc.length == 1
39
+ return rc[1..-1].join( '/' )
40
+ end
41
+
42
+
43
+ end
44
+
45
+ #
46
+ # Implementation for the git version control system.
47
+ #
48
+ class Git < Base
49
+
50
+ def initialize( config )
51
+ super( config )
52
+ @remote = {}
53
+ @vcs = nil
54
+ end
55
+
56
+ #
57
+ ### ATTRIBUTES
58
+ #
59
+ def name
60
+ "git"
61
+ end
62
+
63
+ def fetching_supported?
64
+ true
65
+ end
66
+
67
+ #
68
+ ### METHODS
69
+ #
70
+
71
+ def checkedout?
72
+ return false if !local_path_exist?
73
+ if !Pathname.new( local_path ).join( ".git" ).exist?
74
+ raise Base::VcsError, "Checkout path #{local_path} is not a git repo!"
75
+ end
76
+ return true
77
+ end
78
+
79
+ # Initialize the local repository
80
+ def clone
81
+ # Check if path exists
82
+ if local_path_exist?
83
+ raise GitError, "Failed to create repository at '#{local_path}': Path exists"
84
+ end
85
+
86
+ # Create the directory
87
+ FileUtils.mkdir_p( local_path ) if !$noop
88
+
89
+ # Initialize the repository
90
+ if git( "init", local_path ) != 0
91
+ raise GitError, "Error while initializing the repo `git init #{local_path}'`: #{$?}"
92
+ end
93
+
94
+ config.remote.each do |name, val|
95
+ if git( "remote add #{name} #{val.url}" ) != 0
96
+ raise GitError, "Error while initializing the repo `git remote add #{name} #{val.url}`: #{$?}"
97
+ end
98
+ end
99
+
100
+ cmd = "remote add origin #{repository.url}"
101
+ if git( cmd, local_path ) != 0
102
+ raise GitError, "Error while initializing the repo `#{cmd}`: #{$?}"
103
+ end
104
+
105
+ logger.info <<-EOS
106
+ The following command sometimes fails when issued from this script. Reason unknown. The
107
+ best chance you have is issuing the command manually!
108
+ #{local_path}: #{cmd}
109
+ #{local_path}: git checkout -b #{config.track_branch} #{config.track_remote}/#{config.track_branch}
110
+ EOS
111
+
112
+ fetch()
113
+
114
+ cmd = "checkout -b #{config.track_branch} #{config.track_remote}/#{config.track_branch}"
115
+ if git( cmd, local_path ) != 0
116
+ raise GitError, "Error while initializing the repo `#{cmd}`: #{$?}"
117
+ end
118
+
119
+ end
120
+
121
+ def remote?( name )
122
+ found = false
123
+ git( "remote" ) do |line|
124
+ found = true if line == name
125
+ end
126
+ return found
127
+ end
128
+
129
+ # Fetch from +repository+
130
+ #
131
+ # Initializes the local clone if it does not exist.
132
+ def fetch()
133
+ if !checkedout? and !$noop
134
+ clone
135
+ end
136
+ cmd = "fetch #{config.track_remote}"
137
+ if ( rc = git( cmd ) ) != 0
138
+ raise GitError, "Error while fetching: #{rc}"
139
+ end
140
+ end
141
+
142
+ def git( command, wd = local_path, &block )
143
+ rc = self.class.execute "git #{command}", wd, &block
144
+ if rc != 0
145
+ raise GitError, "git #{command || "" } failed with error code #{rc}";
146
+ end
147
+ rc
148
+ end
149
+
150
+ def rebase
151
+ if 0 != ( git "rebase #{config.track_remote}/#{config.track_branch}" )
152
+ raise GitSvnError, "Error while rebasing the repo with `git rebase git-svn: #{$?}"
153
+ end
154
+ end
155
+
156
+ end # class Git
157
+
158
+ class GitRemote
159
+
160
+ attr_accessor :server
161
+ attr_accessor :path
162
+ attr_reader :name
163
+
164
+ def initialize( name )
165
+ @name = name
166
+ @path = nil
167
+ end
168
+
169
+ def url
170
+ url = ""
171
+ if @server
172
+ url = @server.url
173
+ end
174
+ if @path
175
+ url = "#{url}/#{path}"
176
+ end
177
+ url
178
+ end
179
+
180
+ def to_s
181
+ "REMOTE: #{name} #{url}"
182
+ end
183
+
184
+ end # class Remote
185
+
186
+ end; end # module BuildTool::VCS
187
+