build-tool 0.0.1
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.
- data.tar.gz.sig +3 -0
 - data/History.txt +7 -0
 - data/Manifest.txt +51 -0
 - data/PostInstall.txt +3 -0
 - data/README.rdoc +55 -0
 - data/Rakefile +30 -0
 - data/TODO +2 -0
 - data/bin/kde-build.rb +21 -0
 - data/config/website.yml +2 -0
 - data/config/website.yml.sample +2 -0
 - data/lib/kde-build.rb +18 -0
 - data/lib/kde-build/application.rb +258 -0
 - data/lib/kde-build/build_system.rb +26 -0
 - data/lib/kde-build/build_system/autoconf.rb +109 -0
 - data/lib/kde-build/build_system/base.rb +132 -0
 - data/lib/kde-build/build_system/cmake.rb +82 -0
 - data/lib/kde-build/build_system/qtcopy.rb +125 -0
 - data/lib/kde-build/command.rb +30 -0
 - data/lib/kde-build/command/build.rb +119 -0
 - data/lib/kde-build/command/fetch.rb +28 -0
 - data/lib/kde-build/command/help.rb +71 -0
 - data/lib/kde-build/command/info.rb +42 -0
 - data/lib/kde-build/command/version.rb +43 -0
 - data/lib/kde-build/configuration.rb +186 -0
 - data/lib/kde-build/exception.rb +6 -0
 - data/lib/kde-build/metaaid.rb +18 -0
 - data/lib/kde-build/module.rb +203 -0
 - data/lib/kde-build/module_configuration.rb +107 -0
 - data/lib/kde-build/moduleregistry.rb +85 -0
 - data/lib/kde-build/subprocess.rb +82 -0
 - data/lib/kde-build/tools/ctags.rb +34 -0
 - data/lib/kde-build/tools/logging.rb +49 -0
 - data/lib/kde-build/tools/make.rb +58 -0
 - data/lib/kde-build/tools/ssh.rb +47 -0
 - data/lib/kde-build/vcs.rb +26 -0
 - data/lib/kde-build/vcs/base.rb +81 -0
 - data/lib/kde-build/vcs/git-svn.rb +133 -0
 - data/lib/kde-build/vcs/git.rb +96 -0
 - data/lib/kde-build/vcs/svn.rb +105 -0
 - data/script/console +10 -0
 - data/script/destroy +14 -0
 - data/script/generate +14 -0
 - data/script/txt2html +71 -0
 - data/test.yaml.tmpl +552 -0
 - data/test/test_helper.rb +12 -0
 - data/test/test_kde-build.rb +11 -0
 - data/test/test_vcs_svn.rb +44 -0
 - data/website/index.html +84 -0
 - data/website/index.txt +59 -0
 - data/website/javascripts/rounded_corners_lite.inc.js +285 -0
 - data/website/stylesheets/screen.css +159 -0
 - data/website/template.html.erb +50 -0
 - metadata +171 -0
 - metadata.gz.sig +0 -0
 
| 
         @@ -0,0 +1,34 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'kde-build/configuration'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'kde-build/subprocess'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'singleton'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            module BuildTool
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                class CTagsConfiguration
         
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                    include MJ::Configuration::Configurable
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    include Singleton
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    option( "executable", "Full path for to the executable" )
         
     | 
| 
      
 16 
     | 
    
         
            +
                    option( "options", "" )
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                    def initialize
         
     | 
| 
      
 19 
     | 
    
         
            +
                        @executable = "ctags"
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                YAML.add_domain_type(
         
     | 
| 
      
 25 
     | 
    
         
            +
                    "michael-jansen.biz,2009", "CTagsConfiguration" ) {
         
     | 
| 
      
 26 
     | 
    
         
            +
                        |type, val|
         
     | 
| 
      
 27 
     | 
    
         
            +
                        cc = CTagsConfiguration.instance
         
     | 
| 
      
 28 
     | 
    
         
            +
                        MJ::Configuration::flatten_values val do
         
     | 
| 
      
 29 
     | 
    
         
            +
                            |k, v|
         
     | 
| 
      
 30 
     | 
    
         
            +
                            cc.set( k, v )
         
     | 
| 
      
 31 
     | 
    
         
            +
                        end
         
     | 
| 
      
 32 
     | 
    
         
            +
                    }
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'log4r'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            class Object
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                def while_logging_to( dir, fname, &block )
         
     | 
| 
      
 6 
     | 
    
         
            +
                    if logdir = BuildTool::Application::instance.log_directory
         
     | 
| 
      
 7 
     | 
    
         
            +
                        dirname = "#{logdir}/#{dir}"
         
     | 
| 
      
 8 
     | 
    
         
            +
                        FileUtils.mkdir_p( dirname )
         
     | 
| 
      
 9 
     | 
    
         
            +
                        with_warnings_suppressed do
         
     | 
| 
      
 10 
     | 
    
         
            +
                            $log.add( FileOutputter.new( fname, :filename => "#{dirname}/#{fname}", :level => DEBUG ) )
         
     | 
| 
      
 11 
     | 
    
         
            +
                            Outputter[fname].formatter = BuildTool::CmdFormatter.new
         
     | 
| 
      
 12 
     | 
    
         
            +
                        end
         
     | 
| 
      
 13 
     | 
    
         
            +
                    end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    begin
         
     | 
| 
      
 16 
     | 
    
         
            +
                        yield
         
     | 
| 
      
 17 
     | 
    
         
            +
                    rescue Exception => e
         
     | 
| 
      
 18 
     | 
    
         
            +
                        $log.info("More information in #{dirname}/#{fname}")
         
     | 
| 
      
 19 
     | 
    
         
            +
                        raise e
         
     | 
| 
      
 20 
     | 
    
         
            +
                    ensure
         
     | 
| 
      
 21 
     | 
    
         
            +
                        if logdir
         
     | 
| 
      
 22 
     | 
    
         
            +
                            with_warnings_suppressed do
         
     | 
| 
      
 23 
     | 
    
         
            +
                                $log.remove( fname )
         
     | 
| 
      
 24 
     | 
    
         
            +
                            end
         
     | 
| 
      
 25 
     | 
    
         
            +
                        end
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            module BuildTool
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
                class PlainFormatter < Log4r::Formatter
         
     | 
| 
      
 34 
     | 
    
         
            +
                    def format(event)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      sprintf("%s\n", event.data)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
                class CmdFormatter < Log4r::Formatter
         
     | 
| 
      
 40 
     | 
    
         
            +
                    def format(event)
         
     | 
| 
      
 41 
     | 
    
         
            +
                        if event.level != CMDOUT
         
     | 
| 
      
 42 
     | 
    
         
            +
                            sprintf("%*s %s> %s\n", MaxLevelLength, LNAMES[event.level], 
         
     | 
| 
      
 43 
     | 
    
         
            +
                                  event.name, event.data)
         
     | 
| 
      
 44 
     | 
    
         
            +
                        else
         
     | 
| 
      
 45 
     | 
    
         
            +
                            sprintf("%s\n", event.data)
         
     | 
| 
      
 46 
     | 
    
         
            +
                        end
         
     | 
| 
      
 47 
     | 
    
         
            +
                    end
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,58 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'kde-build/configuration.rb'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 4 
     | 
    
         
            +
            require 'singleton'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module BuildTool
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                class MakeConfiguration
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                    include Singleton
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                    include MJ::Configuration::Configurable
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    option( "executable", "Full path for to the executable" ).
         
     | 
| 
      
 15 
     | 
    
         
            +
                        required
         
     | 
| 
      
 16 
     | 
    
         
            +
                    option( "options", "TODO" )
         
     | 
| 
      
 17 
     | 
    
         
            +
                    option( "cxxflags", "TODO" )
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                    def initialize
         
     | 
| 
      
 20 
     | 
    
         
            +
                        self.executable = "make"
         
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                class Make
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    include MJ::Tools::SubProcess
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                    def make( command, wd = build_directory )
         
     | 
| 
      
 31 
     | 
    
         
            +
                        self.class.execute "#{executable} #{cxxflags} #{options} #{command}", wd
         
     | 
| 
      
 32 
     | 
    
         
            +
                    end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                    def options
         
     | 
| 
      
 35 
     | 
    
         
            +
                        MakeConfiguration.instance.options
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    def cxxflags
         
     | 
| 
      
 39 
     | 
    
         
            +
                        MakeConfiguration.instance.cxxflags
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    def executable
         
     | 
| 
      
 43 
     | 
    
         
            +
                        MakeConfiguration.instance.executable
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
                end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                YAML.add_domain_type(
         
     | 
| 
      
 49 
     | 
    
         
            +
                    "michael-jansen.biz,2009", "MakeConfiguration" ) {
         
     | 
| 
      
 50 
     | 
    
         
            +
                        |type, val|
         
     | 
| 
      
 51 
     | 
    
         
            +
                        mc = MakeConfiguration.instance
         
     | 
| 
      
 52 
     | 
    
         
            +
                        MJ::Configuration::flatten_values val do
         
     | 
| 
      
 53 
     | 
    
         
            +
                            |k, v|
         
     | 
| 
      
 54 
     | 
    
         
            +
                            mc.set( k, v )
         
     | 
| 
      
 55 
     | 
    
         
            +
                        end
         
     | 
| 
      
 56 
     | 
    
         
            +
                    }
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'kde-build/subprocess'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module MJ; module Tools
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
                class SSH
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
                    include MJ::Tools::SubProcess
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
                    def add_key( key_file )
         
     | 
| 
      
 10 
     | 
    
         
            +
                        ssh_add( "#{key_file}" )
         
     | 
| 
      
 11 
     | 
    
         
            +
                    end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    def has_key?( key )
         
     | 
| 
      
 14 
     | 
    
         
            +
                        found = false
         
     | 
| 
      
 15 
     | 
    
         
            +
                        ssh_add '-l' do
         
     | 
| 
      
 16 
     | 
    
         
            +
                            |line|
         
     | 
| 
      
 17 
     | 
    
         
            +
                            if line.index(key) == 0
         
     | 
| 
      
 18 
     | 
    
         
            +
                                return found = true
         
     | 
| 
      
 19 
     | 
    
         
            +
                            end
         
     | 
| 
      
 20 
     | 
    
         
            +
                        end
         
     | 
| 
      
 21 
     | 
    
         
            +
                        return found
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    def remove_key( key_file )
         
     | 
| 
      
 25 
     | 
    
         
            +
                        ssh_add( "-d #{key_file}" )
         
     | 
| 
      
 26 
     | 
    
         
            +
                    end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    def remove_all_keys
         
     | 
| 
      
 29 
     | 
    
         
            +
                        ssh_add( "-D" )
         
     | 
| 
      
 30 
     | 
    
         
            +
                    end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    def list_keys
         
     | 
| 
      
 33 
     | 
    
         
            +
                        ssh_add( "-l" )
         
     | 
| 
      
 34 
     | 
    
         
            +
                    end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                    def ssh_add( command,  &block )
         
     | 
| 
      
 37 
     | 
    
         
            +
                        if block_given?
         
     | 
| 
      
 38 
     | 
    
         
            +
                            self.class.execute "ssh-add #{command}", &block
         
     | 
| 
      
 39 
     | 
    
         
            +
                        else
         
     | 
| 
      
 40 
     | 
    
         
            +
                            self.class.execute "ssh-add #{command}"
         
     | 
| 
      
 41 
     | 
    
         
            +
                        end
         
     | 
| 
      
 42 
     | 
    
         
            +
                    end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            end; end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,26 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'kde-build/vcs/git'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'kde-build/vcs/git-svn'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'kde-build/vcs/svn'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module BuildTool; module VCS
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            @mapping = {
         
     | 
| 
      
 8 
     | 
    
         
            +
                'git-svn' => GitSVN,
         
     | 
| 
      
 9 
     | 
    
         
            +
                'git'     => Git,
         
     | 
| 
      
 10 
     | 
    
         
            +
                'svn'     => SVN
         
     | 
| 
      
 11 
     | 
    
         
            +
            }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            module_function
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            def available
         
     | 
| 
      
 16 
     | 
    
         
            +
                @mapping.keys
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            def get( name )
         
     | 
| 
      
 20 
     | 
    
         
            +
                if !available.include? name
         
     | 
| 
      
 21 
     | 
    
         
            +
                    throw :todo
         
     | 
| 
      
 22 
     | 
    
         
            +
                end
         
     | 
| 
      
 23 
     | 
    
         
            +
                @mapping[name]
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            end; end
         
     | 
| 
         @@ -0,0 +1,81 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'kde-build/configuration'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'kde-build/subprocess'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module BuildTool; module VCS
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                class BuildToolError < Exception; end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
                class BaseConfiguration
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
                    include MJ::Configuration::Configurable
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                    option( 'name', "Name" )
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                # Base class for all version control system implementations.
         
     | 
| 
      
 21 
     | 
    
         
            +
                #
         
     | 
| 
      
 22 
     | 
    
         
            +
                # This class is abstract. Most method just raise NotImplementedError
         
     | 
| 
      
 23 
     | 
    
         
            +
                # exceptions.
         
     | 
| 
      
 24 
     | 
    
         
            +
                class Base
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                    include MJ::Tools::SubProcess
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                    attr_accessor :repository, :path
         
     | 
| 
      
 29 
     | 
    
         
            +
                    attr_accessor :configuration
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                    # Creates a new vcs module. Stores +repository+ and +path+
         
     | 
| 
      
 33 
     | 
    
         
            +
                    def initialize( repository, path = nil)
         
     | 
| 
      
 34 
     | 
    
         
            +
                        @repository = repository
         
     | 
| 
      
 35 
     | 
    
         
            +
                        @path = path
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    # Check if the local checkout exists.
         
     | 
| 
      
 39 
     | 
    
         
            +
                    #
         
     | 
| 
      
 40 
     | 
    
         
            +
                    # This method only checks it the local checkout path exists and is
         
     | 
| 
      
 41 
     | 
    
         
            +
                    # a directory
         
     | 
| 
      
 42 
     | 
    
         
            +
                    def checkedout?
         
     | 
| 
      
 43 
     | 
    
         
            +
                        return ( File.exist?( self.path ) and File.directory?( path ) )
         
     | 
| 
      
 44 
     | 
    
         
            +
                    end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                    # Fetch the changes from the remote repository without changing
         
     | 
| 
      
 47 
     | 
    
         
            +
                    # code locally
         
     | 
| 
      
 48 
     | 
    
         
            +
                    #
         
     | 
| 
      
 49 
     | 
    
         
            +
                    # raises NotImplementedError
         
     | 
| 
      
 50 
     | 
    
         
            +
                    def fetch
         
     | 
| 
      
 51 
     | 
    
         
            +
                        raise NotImplementedError, "Base::fetch in #{self.class}"
         
     | 
| 
      
 52 
     | 
    
         
            +
                    end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                    # Initialize the local checkout
         
     | 
| 
      
 55 
     | 
    
         
            +
                    #
         
     | 
| 
      
 56 
     | 
    
         
            +
                    # raises NotImplementedError
         
     | 
| 
      
 57 
     | 
    
         
            +
                    def init
         
     | 
| 
      
 58 
     | 
    
         
            +
                        raise NotImplementedError, "Base::init in #{self.class}"
         
     | 
| 
      
 59 
     | 
    
         
            +
                    end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
                    # Return the name for this version control system
         
     | 
| 
      
 62 
     | 
    
         
            +
                    #
         
     | 
| 
      
 63 
     | 
    
         
            +
                    # raises NotImplementedError
         
     | 
| 
      
 64 
     | 
    
         
            +
                    def name
         
     | 
| 
      
 65 
     | 
    
         
            +
                        raise NotImplementedError, "Base::name in #{self.class}"
         
     | 
| 
      
 66 
     | 
    
         
            +
                    end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                    # Rebase the local branch with the remote changes
         
     | 
| 
      
 69 
     | 
    
         
            +
                    #
         
     | 
| 
      
 70 
     | 
    
         
            +
                    # raises NotImplementedError
         
     | 
| 
      
 71 
     | 
    
         
            +
                    def rebase
         
     | 
| 
      
 72 
     | 
    
         
            +
                        raise NotImplementedError, "Base::rebase in #{self.class}"
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                    def self.config
         
     | 
| 
      
 76 
     | 
    
         
            +
                        raise NotImplementedError, "Base::config in #{self}"
         
     | 
| 
      
 77 
     | 
    
         
            +
                    end
         
     | 
| 
      
 78 
     | 
    
         
            +
             
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
            end; end
         
     | 
| 
         @@ -0,0 +1,133 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'kde-build/vcs/base'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            module BuildTool; module VCS
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                    class GitSvnConfiguration < BaseConfiguration
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                        option( "externals", "List of externals to fetch" ).
         
     | 
| 
      
 11 
     | 
    
         
            +
                            on_write {
         
     | 
| 
      
 12 
     | 
    
         
            +
                                |val|
         
     | 
| 
      
 13 
     | 
    
         
            +
                                if val.instance_of?( Array )
         
     | 
| 
      
 14 
     | 
    
         
            +
                                    a = val.inject([]) {
         
     | 
| 
      
 15 
     | 
    
         
            +
                                        |arr, v|
         
     | 
| 
      
 16 
     | 
    
         
            +
                                        v.each_pair {
         
     | 
| 
      
 17 
     | 
    
         
            +
                                            |val, key|
         
     | 
| 
      
 18 
     | 
    
         
            +
                                            arr << val << key
         
     | 
| 
      
 19 
     | 
    
         
            +
                                        }
         
     | 
| 
      
 20 
     | 
    
         
            +
                                        arr
         
     | 
| 
      
 21 
     | 
    
         
            +
                                    }
         
     | 
| 
      
 22 
     | 
    
         
            +
                                    val = Hash[*a]
         
     | 
| 
      
 23 
     | 
    
         
            +
                                else
         
     | 
| 
      
 24 
     | 
    
         
            +
                                    throw :todo
         
     | 
| 
      
 25 
     | 
    
         
            +
                                end
         
     | 
| 
      
 26 
     | 
    
         
            +
                                val
         
     | 
| 
      
 27 
     | 
    
         
            +
                            }
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                        def initialize
         
     | 
| 
      
 31 
     | 
    
         
            +
                            super
         
     | 
| 
      
 32 
     | 
    
         
            +
                            self.name = "git-svn"
         
     | 
| 
      
 33 
     | 
    
         
            +
                        end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                    end
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
      
 37 
     | 
    
         
            +
                    # Git-SVN Error
         
     | 
| 
      
 38 
     | 
    
         
            +
                    class GitSvnError < BuildToolError
         
     | 
| 
      
 39 
     | 
    
         
            +
                    end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                    # Implementation for the git-svn version control system
         
     | 
| 
      
 43 
     | 
    
         
            +
                    # (http://git-scm.org)
         
     | 
| 
      
 44 
     | 
    
         
            +
                    class GitSVN < Base
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                        def initialize( repository, path )
         
     | 
| 
      
 47 
     | 
    
         
            +
                            super repository, path
         
     | 
| 
      
 48 
     | 
    
         
            +
                        end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                        # Check if the local checkout exists.
         
     | 
| 
      
 51 
     | 
    
         
            +
                        #
         
     | 
| 
      
 52 
     | 
    
         
            +
                        # calls VCS::Base::checkedout? and checks if there is a '.git'
         
     | 
| 
      
 53 
     | 
    
         
            +
                        # directory at +path+
         
     | 
| 
      
 54 
     | 
    
         
            +
                        def checkedout?
         
     | 
| 
      
 55 
     | 
    
         
            +
                            return false if !super
         
     | 
| 
      
 56 
     | 
    
         
            +
                            if !File.exists? "#{path}/.git"
         
     | 
| 
      
 57 
     | 
    
         
            +
                                $log.debug("Checkout path #{path} is not a git repo")
         
     | 
| 
      
 58 
     | 
    
         
            +
                                return false
         
     | 
| 
      
 59 
     | 
    
         
            +
                            end
         
     | 
| 
      
 60 
     | 
    
         
            +
                            return true
         
     | 
| 
      
 61 
     | 
    
         
            +
                        end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                        def self.config
         
     | 
| 
      
 64 
     | 
    
         
            +
                            GitSvnConfiguration
         
     | 
| 
      
 65 
     | 
    
         
            +
                        end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                        # Execute a git command in the context of the local git repository
         
     | 
| 
      
 68 
     | 
    
         
            +
                        def git_svn( command, wd = path )
         
     | 
| 
      
 69 
     | 
    
         
            +
                            self.class.execute "git svn #{command}", wd
         
     | 
| 
      
 70 
     | 
    
         
            +
                        end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                        # Fetch from +repository+
         
     | 
| 
      
 73 
     | 
    
         
            +
                        #
         
     | 
| 
      
 74 
     | 
    
         
            +
                        # Initializes the local clone if it does not exist.
         
     | 
| 
      
 75 
     | 
    
         
            +
                        def fetch( revision = nil )
         
     | 
| 
      
 76 
     | 
    
         
            +
                            if !checkedout? and !$noop
         
     | 
| 
      
 77 
     | 
    
         
            +
                                init
         
     | 
| 
      
 78 
     | 
    
         
            +
                            end
         
     | 
| 
      
 79 
     | 
    
         
            +
                            if revision
         
     | 
| 
      
 80 
     | 
    
         
            +
                                cmd = "fetch -r#{revision}"
         
     | 
| 
      
 81 
     | 
    
         
            +
                            else
         
     | 
| 
      
 82 
     | 
    
         
            +
                                cmd = "fetch"
         
     | 
| 
      
 83 
     | 
    
         
            +
                            end
         
     | 
| 
      
 84 
     | 
    
         
            +
                            if ( rc = git_svn( cmd ) ) != 0
         
     | 
| 
      
 85 
     | 
    
         
            +
                                raise GitSvnError, "Error while fetching: #{rc}"
         
     | 
| 
      
 86 
     | 
    
         
            +
                            end
         
     | 
| 
      
 87 
     | 
    
         
            +
                            update_externals
         
     | 
| 
      
 88 
     | 
    
         
            +
                        end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                        # Initialize the local repository
         
     | 
| 
      
 91 
     | 
    
         
            +
                        def init( revision = nil )
         
     | 
| 
      
 92 
     | 
    
         
            +
                            # Check if path exists
         
     | 
| 
      
 93 
     | 
    
         
            +
                            if File.exists? path
         
     | 
| 
      
 94 
     | 
    
         
            +
                                raise GitSvnError, "Failed to create repository at '#{path}': Path exists"
         
     | 
| 
      
 95 
     | 
    
         
            +
                            end
         
     | 
| 
      
 96 
     | 
    
         
            +
                            # Make sure we have a revision
         
     | 
| 
      
 97 
     | 
    
         
            +
                            if !revision
         
     | 
| 
      
 98 
     | 
    
         
            +
                                revision = SVN.new( repository ).last_changed_rev
         
     | 
| 
      
 99 
     | 
    
         
            +
                            end
         
     | 
| 
      
 100 
     | 
    
         
            +
                            if !revision or revision == 0
         
     | 
| 
      
 101 
     | 
    
         
            +
                                raise GitSvnError, "Failed to retrieve revision to clone from '#{repository}'"
         
     | 
| 
      
 102 
     | 
    
         
            +
                            end
         
     | 
| 
      
 103 
     | 
    
         
            +
                            # Create the directory
         
     | 
| 
      
 104 
     | 
    
         
            +
                            FileUtils.mkdir_p( path ) if !$noop
         
     | 
| 
      
 105 
     | 
    
         
            +
                            # Init the repository
         
     | 
| 
      
 106 
     | 
    
         
            +
                            if !git_svn "init #{repository}"
         
     | 
| 
      
 107 
     | 
    
         
            +
                                raise GitSvnError, "Error while initializing the repo `git svn init '#{repository}'`: #{$?}"
         
     | 
| 
      
 108 
     | 
    
         
            +
                            end
         
     | 
| 
      
 109 
     | 
    
         
            +
                            fetch( revision )
         
     | 
| 
      
 110 
     | 
    
         
            +
                            update_externals
         
     | 
| 
      
 111 
     | 
    
         
            +
                        end
         
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
                        # Returns Git-SVN
         
     | 
| 
      
 114 
     | 
    
         
            +
                        def name
         
     | 
| 
      
 115 
     | 
    
         
            +
                            "Git-SVN"
         
     | 
| 
      
 116 
     | 
    
         
            +
                        end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                        def rebase
         
     | 
| 
      
 119 
     | 
    
         
            +
                            return git_svn "rebase -l master"
         
     | 
| 
      
 120 
     | 
    
         
            +
                        end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                        def update_externals
         
     | 
| 
      
 123 
     | 
    
         
            +
                            return if !configuration.externals
         
     | 
| 
      
 124 
     | 
    
         
            +
                            configuration.externals.each do |local, remote|
         
     | 
| 
      
 125 
     | 
    
         
            +
                                SVN::svn( "checkout #{remote}@HEAD #{local}", wd = path  )
         
     | 
| 
      
 126 
     | 
    
         
            +
                            end
         
     | 
| 
      
 127 
     | 
    
         
            +
                        end
         
     | 
| 
      
 128 
     | 
    
         
            +
             
     | 
| 
      
 129 
     | 
    
         
            +
                    end
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
            end; end
         
     | 
| 
      
 133 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,96 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
            #
         
     | 
| 
      
 3 
     | 
    
         
            +
            # git-svn.rb - GIT-SVN VCS Implementation
         
     | 
| 
      
 4 
     | 
    
         
            +
            #
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # == Overview
         
     | 
| 
      
 7 
     | 
    
         
            +
            #
         
     | 
| 
      
 8 
     | 
    
         
            +
            # bla bla
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'kde-build/vcs/base'
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            module BuildTool; module VCS
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                    class GitConfiguration < BaseConfiguration
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                        def initialize
         
     | 
| 
      
 17 
     | 
    
         
            +
                            super
         
     | 
| 
      
 18 
     | 
    
         
            +
                            self.name = "git"
         
     | 
| 
      
 19 
     | 
    
         
            +
                        end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                    end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
                    # Implementation for the git-svn version control system
         
     | 
| 
      
 25 
     | 
    
         
            +
                    # (http://git-scm.org)
         
     | 
| 
      
 26 
     | 
    
         
            +
                    class Git < Base
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
                        def initialize( repository, path )
         
     | 
| 
      
 29 
     | 
    
         
            +
                            super
         
     | 
| 
      
 30 
     | 
    
         
            +
                        end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                        def name
         
     | 
| 
      
 33 
     | 
    
         
            +
                            "GIT"
         
     | 
| 
      
 34 
     | 
    
         
            +
                        end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                        def git( command, wd = path )
         
     | 
| 
      
 37 
     | 
    
         
            +
                            self.class.execute "git #{command}", wd
         
     | 
| 
      
 38 
     | 
    
         
            +
                        end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                        def self.config
         
     | 
| 
      
 41 
     | 
    
         
            +
                            GitConfiguration
         
     | 
| 
      
 42 
     | 
    
         
            +
                        end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                        # Check if the local checkout exists.
         
     | 
| 
      
 45 
     | 
    
         
            +
                        #
         
     | 
| 
      
 46 
     | 
    
         
            +
                        # calls VCS::Base::checkedout? and checks if there is a '.git'
         
     | 
| 
      
 47 
     | 
    
         
            +
                        # directory at +path+
         
     | 
| 
      
 48 
     | 
    
         
            +
                        def checkedout?
         
     | 
| 
      
 49 
     | 
    
         
            +
                            return false if !super
         
     | 
| 
      
 50 
     | 
    
         
            +
                            if !File.exists? "#{path}/.git"
         
     | 
| 
      
 51 
     | 
    
         
            +
                                $log.debug("Checkout path #{path} is not a git repo")
         
     | 
| 
      
 52 
     | 
    
         
            +
                                return false
         
     | 
| 
      
 53 
     | 
    
         
            +
                            end
         
     | 
| 
      
 54 
     | 
    
         
            +
                            return true
         
     | 
| 
      
 55 
     | 
    
         
            +
                        end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                        # Fetch from +repository+
         
     | 
| 
      
 58 
     | 
    
         
            +
                        #
         
     | 
| 
      
 59 
     | 
    
         
            +
                        # Initializes the local clone if it does not exist.
         
     | 
| 
      
 60 
     | 
    
         
            +
                        def fetch()
         
     | 
| 
      
 61 
     | 
    
         
            +
                            if !checkedout? and !$noop
         
     | 
| 
      
 62 
     | 
    
         
            +
                                init
         
     | 
| 
      
 63 
     | 
    
         
            +
                            end
         
     | 
| 
      
 64 
     | 
    
         
            +
                            cmd = "fetch"
         
     | 
| 
      
 65 
     | 
    
         
            +
                            if ( rc = git( cmd ) ) != 0
         
     | 
| 
      
 66 
     | 
    
         
            +
                                raise GitError, "Error while fetching: #{rc}"
         
     | 
| 
      
 67 
     | 
    
         
            +
                            end
         
     | 
| 
      
 68 
     | 
    
         
            +
                        end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                        # Initialize the local repository
         
     | 
| 
      
 72 
     | 
    
         
            +
                        def init
         
     | 
| 
      
 73 
     | 
    
         
            +
                            # Check if path exists
         
     | 
| 
      
 74 
     | 
    
         
            +
                            if File.exists? path
         
     | 
| 
      
 75 
     | 
    
         
            +
                                raise GitSvnError, "Failed to create repository at '#{path}': Path exists"
         
     | 
| 
      
 76 
     | 
    
         
            +
                            end
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
                            # Create the directory
         
     | 
| 
      
 79 
     | 
    
         
            +
                            FileUtils.mkdir_p( File.split(path)[0] ) if !$noop
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                            # Init the repository
         
     | 
| 
      
 82 
     | 
    
         
            +
                            if !git( "clone #{repository} #{path}", File.split(path)[0] )
         
     | 
| 
      
 83 
     | 
    
         
            +
                                raise GitError, "Error while initializing the repo `git clone '#{repository} #{path}'`: #{$?}"
         
     | 
| 
      
 84 
     | 
    
         
            +
                            end
         
     | 
| 
      
 85 
     | 
    
         
            +
                            fetch()
         
     | 
| 
      
 86 
     | 
    
         
            +
                        end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                        def rebase
         
     | 
| 
      
 89 
     | 
    
         
            +
                            return git "rebase origin"
         
     | 
| 
      
 90 
     | 
    
         
            +
                        end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                    end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
            end
         
     |