heidi 0.2.1 → 0.3.0
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/VERSION +1 -1
- data/bin/heidi +25 -9
- data/heidi.gemspec +6 -6
- data/lib/heidi/git.rb +14 -0
- data/lib/heidi/project.rb +30 -3
- data/lib/heidi/web/public/css/screen.css +9 -0
- data/lib/heidi/web/views/build.erb +8 -4
- data/lib/heidi/web/views/commit.erb +10 -0
- data/lib/heidi/web/views/config.erb +21 -0
- data/lib/heidi/web/views/home.erb +4 -1
- data/lib/heidi/web/views/project.erb +22 -14
- data/lib/heidi/web.rb +37 -3
- metadata +80 -77
- data/bin/heidi_console +0 -3
- data/bin/heidi_cron +0 -8
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0. | 
| 1 | 
            +
            0.3.0
         | 
    
        data/bin/heidi
    CHANGED
    
    | @@ -7,6 +7,10 @@ cmd   = ARGV.shift | |
| 7 7 | 
             
            for_a = ARGV.shift
         | 
| 8 8 |  | 
| 9 9 | 
             
            ENV['PATH'] = "/bin:/usr/bin:/usr/local/bin"
         | 
| 10 | 
            +
            if ENV['HEIDI_PATH']
         | 
| 11 | 
            +
              ENV['PATH'] += ":#{ENV['HEIDI_PATH']}"
         | 
| 12 | 
            +
              ENV['HEIDI_PATH'] = nil
         | 
| 13 | 
            +
            end
         | 
| 10 14 |  | 
| 11 15 | 
             
            shell = SimpleShell.new
         | 
| 12 16 |  | 
| @@ -19,10 +23,9 @@ end | |
| 19 23 |  | 
| 20 24 | 
             
            case cmd
         | 
| 21 25 | 
             
            when "new"
         | 
| 22 | 
            -
              puts "creating #{for_a}"
         | 
| 26 | 
            +
              puts "creating #{for_a}/"
         | 
| 23 27 | 
             
              puts "creating #{for_a}/projects"
         | 
| 24 28 | 
             
              shell.mkdir %W(-p #{for_a}/projects)
         | 
| 25 | 
            -
              puts "creating #{for_a}/bin"
         | 
| 26 29 | 
             
              shell.mkdir %W(-p #{for_a}/bin)
         | 
| 27 30 | 
             
              puts "creating #{for_a}/Gemfile"
         | 
| 28 31 | 
             
              File.open("#{for_a}/Gemfile", File::CREAT|File::WRONLY) do |f|
         | 
| @@ -30,14 +33,27 @@ when "new" | |
| 30 33 | 
             
                f.puts 'gem "heidi"'
         | 
| 31 34 | 
             
              end
         | 
| 32 35 |  | 
| 33 | 
            -
              puts " | 
| 34 | 
            -
               | 
| 35 | 
            -
             | 
| 36 | 
            -
               | 
| 36 | 
            +
              puts "\nIf you like you can run: bundle install --binstubs"
         | 
| 37 | 
            +
              puts "this will tie heidi and heidi_web to this location"
         | 
| 38 | 
            +
              puts "\nFor even more tying down, run: bundle install --deployment"
         | 
| 39 | 
            +
              puts "after running bundle install --binstubs"
         | 
| 40 | 
            +
             | 
| 37 41 |  | 
| 38 42 | 
             
            when "project"
         | 
| 43 | 
            +
              repo = ARGV.shift
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              if repo.nil?
         | 
| 46 | 
            +
                $stderr.puts "You must specify a repository"
         | 
| 47 | 
            +
                exit 1
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 39 50 | 
             
              check_heidi_root
         | 
| 40 51 |  | 
| 52 | 
            +
              if File.exists? "projects/#{for_a}"
         | 
| 53 | 
            +
                $stderr.puts "projects/#{for_a} is in the way. Please remove it"
         | 
| 54 | 
            +
                exit 1
         | 
| 55 | 
            +
              end
         | 
| 56 | 
            +
             | 
| 41 57 | 
             
              # create a logs dir
         | 
| 42 58 | 
             
              puts "creating projects/#{for_a}"
         | 
| 43 59 | 
             
              puts "creating projects/#{for_a}/logs"
         | 
| @@ -51,7 +67,7 @@ when "project" | |
| 51 67 | 
             
              # make a clone
         | 
| 52 68 | 
             
              shell.in("projects/#{for_a}") do |sh|
         | 
| 53 69 | 
             
                puts "filling #{for_a} cache"
         | 
| 54 | 
            -
             | 
| 70 | 
            +
             | 
| 55 71 | 
             
                puts "git clone #{repo}"
         | 
| 56 72 | 
             
                sh.git %W(clone #{repo} cached)
         | 
| 57 73 |  | 
| @@ -60,7 +76,7 @@ when "project" | |
| 60 76 | 
             
                  cached.git %W(config heidi.name #{for_a})
         | 
| 61 77 | 
             
                end
         | 
| 62 78 | 
             
              end
         | 
| 63 | 
            -
              puts "Creating default test hook: projects/#{for_a}/hooks/ | 
| 79 | 
            +
              puts "Creating default test hook: projects/#{for_a}/hooks/tests/01_rspec"
         | 
| 64 80 | 
             
              File.open("projects/#{for_a}/hooks/tests/01_rspec", File::CREAT|File::WRONLY) do |f|
         | 
| 65 81 | 
             
                f.puts %q(#!/bin/sh
         | 
| 66 82 |  | 
| @@ -68,7 +84,7 @@ when "project" | |
| 68 84 | 
             
            bundle exec rake spec
         | 
| 69 85 | 
             
            )
         | 
| 70 86 | 
             
              end
         | 
| 71 | 
            -
              shell.chmod %W(+x projects/#{for_a}/hooks/ | 
| 87 | 
            +
              shell.chmod %W(+x projects/#{for_a}/hooks/tests/01_rspec)
         | 
| 72 88 | 
             
              puts "\n"
         | 
| 73 89 | 
             
              puts "Now edit or add some hooks and run: heidi integrate #{for_a}"
         | 
| 74 90 |  | 
    
        data/heidi.gemspec
    CHANGED
    
    | @@ -5,14 +5,14 @@ | |
| 5 5 |  | 
| 6 6 | 
             
            Gem::Specification.new do |s|
         | 
| 7 7 | 
             
              s.name = "heidi"
         | 
| 8 | 
            -
              s.version = "0. | 
| 8 | 
            +
              s.version = "0.3.0"
         | 
| 9 9 |  | 
| 10 10 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 11 11 | 
             
              s.authors = ["Hartog C. de Mik"]
         | 
| 12 | 
            -
              s.date = "2012-02- | 
| 12 | 
            +
              s.date = "2012-02-14"
         | 
| 13 13 | 
             
              s.description = "CI-Joe alike CI system called Heidi."
         | 
| 14 14 | 
             
              s.email = "hartog@organisedminds.com"
         | 
| 15 | 
            -
              s.executables = ["heidi", " | 
| 15 | 
            +
              s.executables = ["heidi", "heidi_web"]
         | 
| 16 16 | 
             
              s.extra_rdoc_files = [
         | 
| 17 17 | 
             
                "LICENSE.txt",
         | 
| 18 18 | 
             
                "README.rdoc"
         | 
| @@ -27,8 +27,6 @@ Gem::Specification.new do |s| | |
| 27 27 | 
             
                "Rakefile",
         | 
| 28 28 | 
             
                "VERSION",
         | 
| 29 29 | 
             
                "bin/heidi",
         | 
| 30 | 
            -
                "bin/heidi_console",
         | 
| 31 | 
            -
                "bin/heidi_cron",
         | 
| 32 30 | 
             
                "bin/heidi_web",
         | 
| 33 31 | 
             
                "heidi.gemspec",
         | 
| 34 32 | 
             
                "lib/heidi.rb",
         | 
| @@ -46,6 +44,8 @@ Gem::Specification.new do |s| | |
| 46 44 | 
             
                "lib/heidi/web/public/images/OrganisedMinds.png",
         | 
| 47 45 | 
             
                "lib/heidi/web/public/images/heidi.jpeg",
         | 
| 48 46 | 
             
                "lib/heidi/web/views/build.erb",
         | 
| 47 | 
            +
                "lib/heidi/web/views/commit.erb",
         | 
| 48 | 
            +
                "lib/heidi/web/views/config.erb",
         | 
| 49 49 | 
             
                "lib/heidi/web/views/home.erb",
         | 
| 50 50 | 
             
                "lib/heidi/web/views/layout.erb",
         | 
| 51 51 | 
             
                "lib/heidi/web/views/project.erb",
         | 
| @@ -63,7 +63,7 @@ Gem::Specification.new do |s| | |
| 63 63 | 
             
              s.homepage = "http://github.com/coffeeaddict/heid"
         | 
| 64 64 | 
             
              s.licenses = ["MIT"]
         | 
| 65 65 | 
             
              s.require_paths = ["lib"]
         | 
| 66 | 
            -
              s.rubygems_version = "1.8. | 
| 66 | 
            +
              s.rubygems_version = "1.8.16"
         | 
| 67 67 | 
             
              s.summary = "A naive CI system"
         | 
| 68 68 |  | 
| 69 69 | 
             
              if s.respond_to? :specification_version then
         | 
    
        data/lib/heidi/git.rb
    CHANGED
    
    | @@ -37,6 +37,12 @@ class Heidi | |
| 37 37 | 
             
                  res.out.split("\n").collect{ |b| b.gsub(/^[\s*]+/, '') }
         | 
| 38 38 | 
             
                end
         | 
| 39 39 |  | 
| 40 | 
            +
                def remote_branches
         | 
| 41 | 
            +
                  res = @shell.git(%W(branch --no-color -r))
         | 
| 42 | 
            +
                  branches = res.out.split("\n").collect{ |b| b.gsub(/^[\s*]+/, '') }
         | 
| 43 | 
            +
                  branches.select { |b| b !~ /HEAD/ }
         | 
| 44 | 
            +
                end
         | 
| 45 | 
            +
             | 
| 40 46 | 
             
                # git checkout $name
         | 
| 41 47 | 
             
                def switch(name)
         | 
| 42 48 | 
             
                  return nil unless branches.include?(name)
         | 
| @@ -118,6 +124,14 @@ class Heidi | |
| 118 124 | 
             
                  @shell.git %W(log -n#{amount} --color --graph --pretty=oneline --abbrev-commit)
         | 
| 119 125 | 
             
                end
         | 
| 120 126 |  | 
| 127 | 
            +
                def stat(commit)
         | 
| 128 | 
            +
                  @shell.git(%W(log -n1 --color --stat #{commit})).out
         | 
| 129 | 
            +
                end
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                def diff(commit)
         | 
| 132 | 
            +
                  @shell.git(%W(diff --color #{commit}^ #{commit})).out
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
             | 
| 121 135 | 
             
                # git config $key $value
         | 
| 122 136 | 
             
                def []=(key, value)
         | 
| 123 137 | 
             
                  @shell.system("git", "config", "heidi.#{key}", value)
         | 
    
        data/lib/heidi/project.rb
    CHANGED
    
    | @@ -46,6 +46,10 @@ class Heidi | |
| 46 46 | 
             
                  @name ||= @git[:name]
         | 
| 47 47 | 
             
                end
         | 
| 48 48 |  | 
| 49 | 
            +
                def basename
         | 
| 50 | 
            +
                  File.basename(@root)
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 49 53 | 
             
                def commit
         | 
| 50 54 | 
             
                  @git.commit[0..8]
         | 
| 51 55 | 
             
                end
         | 
| @@ -90,6 +94,14 @@ class Heidi | |
| 90 94 | 
             
                  name = @git["build.branch"]
         | 
| 91 95 | 
             
                  name == "" ? nil : name
         | 
| 92 96 | 
             
                end
         | 
| 97 | 
            +
                def integration_branch=(name)
         | 
| 98 | 
            +
                  name = name.split('/').last if name =~ /\//
         | 
| 99 | 
            +
                  @git["build.branch"] = name
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                def integration_branches
         | 
| 103 | 
            +
                  @git.remote_branches
         | 
| 104 | 
            +
                end
         | 
| 93 105 |  | 
| 94 106 | 
             
                def integrate(forced=false)
         | 
| 95 107 | 
             
                  return true if !forced && self.current_build == self.commit
         | 
| @@ -148,14 +160,29 @@ class Heidi | |
| 148 160 |  | 
| 149 161 | 
             
                  lines = []
         | 
| 150 162 | 
             
                  log.out.lines.each do |line|
         | 
| 151 | 
            -
                    color_less = line.gsub(/\e\[[^m] | 
| 152 | 
            -
                    commit = color_less.scan(/^[ | 
| 153 | 
            -
                     | 
| 163 | 
            +
                    color_less = line.gsub(/\e\[[^m]*m?/, '')
         | 
| 164 | 
            +
                    commit = color_less.scan(/^[^a-z0-9]+([a-z0-9]+)/).flatten.first
         | 
| 165 | 
            +
                    (graph, message) = line.chomp.split(commit)
         | 
| 166 | 
            +
                    lines << {
         | 
| 167 | 
            +
                      :line    => line,
         | 
| 168 | 
            +
                      :commit  => commit,
         | 
| 169 | 
            +
                      :build   => builds.find(commit),
         | 
| 170 | 
            +
                      :graph   => graph,
         | 
| 171 | 
            +
                      :message => message,
         | 
| 172 | 
            +
                    }
         | 
| 154 173 | 
             
                  end
         | 
| 155 174 |  | 
| 156 175 | 
             
                  return lines
         | 
| 157 176 | 
             
                end
         | 
| 158 177 |  | 
| 178 | 
            +
                def stat(commit)
         | 
| 179 | 
            +
                  @git.stat(commit)
         | 
| 180 | 
            +
                end
         | 
| 181 | 
            +
             | 
| 182 | 
            +
                def diff(commit)
         | 
| 183 | 
            +
                  @git.diff(commit)
         | 
| 184 | 
            +
                end
         | 
| 185 | 
            +
             | 
| 159 186 | 
             
                def unlock
         | 
| 160 187 | 
             
                  File.unlink lock_file
         | 
| 161 188 | 
             
                end
         | 
| @@ -148,6 +148,9 @@ pre.terminal { | |
| 148 148 | 
             
            .terminal a {
         | 
| 149 149 | 
             
              color: inherit;
         | 
| 150 150 | 
             
              text-decoration: none;
         | 
| 151 | 
            +
            }
         | 
| 152 | 
            +
             | 
| 153 | 
            +
            .terminal a.build {
         | 
| 151 154 | 
             
              font-weight: bold;
         | 
| 152 155 | 
             
              border-bottom: dashed #ccc 1px;
         | 
| 153 156 | 
             
              margin: 4px 0;
         | 
| @@ -191,3 +194,9 @@ ul.projects { | |
| 191 194 | 
             
              width: 75%;
         | 
| 192 195 | 
             
              overflow: hidden;
         | 
| 193 196 | 
             
            }
         | 
| 197 | 
            +
             | 
| 198 | 
            +
            label {
         | 
| 199 | 
            +
              display: inline-block;
         | 
| 200 | 
            +
              min-width: 120px;
         | 
| 201 | 
            +
              font-weight: bold;
         | 
| 202 | 
            +
            }
         | 
| @@ -1,18 +1,22 @@ | |
| 1 1 | 
             
            <h1><%= project.name %></h1>
         | 
| 2 2 |  | 
| 3 | 
            -
            <a href="/projects/<%= project. | 
| 3 | 
            +
            <a href="/projects/<%= project.basename %>"><< back</a>
         | 
| 4 4 | 
             
            <br /><br />
         | 
| 5 5 |  | 
| 6 6 | 
             
            <h2 class="<%= build.status %>"><%= build.commit %></h2>
         | 
| 7 | 
            -
             | 
| 7 | 
            +
            <div class="column">
         | 
| 8 8 | 
             
            <% if build.status == "passed" %>
         | 
| 9 | 
            -
             <a href='/projects/<%= project. | 
| 9 | 
            +
             <a href='/projects/<%= project.basename %>/build/<%= build.commit %>/tar_ball'>download</a>
         | 
| 10 10 | 
             
            <br /><br />
         | 
| 11 11 | 
             
            <% end %>
         | 
| 12 12 |  | 
| 13 13 | 
             
            | <% build.logs.each do |log| %>
         | 
| 14 14 | 
             
             <a href="#<%= log.file_name %>"><%= log.file_name %></a> |
         | 
| 15 15 | 
             
            <% end %>
         | 
| 16 | 
            +
            </div>
         | 
| 17 | 
            +
            <div class="column">
         | 
| 18 | 
            +
              <a href="/projects/<%= project.basename %>/commit/<%= build.commit %>">Want to see the commit?</a>
         | 
| 19 | 
            +
            </div>
         | 
| 16 20 | 
             
            <br class="clear" />
         | 
| 17 21 | 
             
            <br />
         | 
| 18 22 | 
             
            <br />
         | 
| @@ -20,6 +24,6 @@ | |
| 20 24 | 
             
            <% build.logs.each do |log| %>
         | 
| 21 25 | 
             
              <h3 class="log"><%= log.file_name %></h3>
         | 
| 22 26 | 
             
              <a name="<%= log.file_name %>" href="#top" class="top">top</a>
         | 
| 23 | 
            -
              <pre class="terminal"><%= ansi_color_codes(log.contents) %></pre>
         | 
| 27 | 
            +
              <pre class="terminal"><%= ansi_color_codes(h(log.contents)) %></pre>
         | 
| 24 28 | 
             
            <% end %>
         | 
| 25 29 | 
             
            <br /><br />
         | 
| @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            <h1>Configure <%= project.name %></h1>
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            <form method="POST" action="/projects/<%= project.basename %>">
         | 
| 4 | 
            +
              <label for="name">Name</label>
         | 
| 5 | 
            +
              <input type="text" name="name" value="<%= project.name %>" />
         | 
| 6 | 
            +
              <br />
         | 
| 7 | 
            +
              <br />
         | 
| 8 | 
            +
             | 
| 9 | 
            +
              <label for="branch">Integration branch</label>
         | 
| 10 | 
            +
              <select name="branch">
         | 
| 11 | 
            +
                <option value="">...</option>
         | 
| 12 | 
            +
                <% project.integration_branches.each do |branch| %>
         | 
| 13 | 
            +
                  <% branch_name = branch.split("/").last %>
         | 
| 14 | 
            +
                  <option value="<%= branch_name %>" <%= "selected" if branch_name == project.integration_branch %>><%= branch %></option>
         | 
| 15 | 
            +
                <% end %>
         | 
| 16 | 
            +
              </select>
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              <br />
         | 
| 19 | 
            +
              <br />
         | 
| 20 | 
            +
              <input type="submit" />
         | 
| 21 | 
            +
            </form>
         | 
| @@ -2,7 +2,10 @@ | |
| 2 2 | 
             
              <h1>Projects</h1>
         | 
| 3 3 | 
             
              <ul class="projects">
         | 
| 4 4 | 
             
                <% projects.each do |project| %>
         | 
| 5 | 
            -
                  <li class="<%= project.build_status %>" | 
| 5 | 
            +
                  <li class="<%= project.build_status %>">
         | 
| 6 | 
            +
                    <a href="/projects/<%= project.basename %>"><%= project.name %></a>
         | 
| 7 | 
            +
                    - <%= project.build_status %>
         | 
| 8 | 
            +
                  </li>
         | 
| 6 9 | 
             
                <% end %>
         | 
| 7 10 | 
             
              </ul>
         | 
| 8 11 | 
             
            </div>
         | 
| @@ -9,21 +9,29 @@ | |
| 9 9 | 
             
              latest  = builds.select { |b| b.commit == project.latest_build }.first
         | 
| 10 10 | 
             
            %>
         | 
| 11 11 |  | 
| 12 | 
            -
            < | 
| 13 | 
            -
            < | 
| 14 | 
            -
             | 
| 15 | 
            -
               | 
| 16 | 
            -
             | 
| 17 | 
            -
             | 
| 18 | 
            -
            < | 
| 19 | 
            -
             | 
| 20 | 
            -
               | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 12 | 
            +
            <div class="column">
         | 
| 13 | 
            +
              <h2>Overview</h2>
         | 
| 14 | 
            +
              <strong class="label">Current</strong> :
         | 
| 15 | 
            +
              <% unless current.nil? %>
         | 
| 16 | 
            +
                <a class="<%= current.status %>" href="/projects/<%= project.basename %>/build/<%= current.commit %>"><%= current.commit %></a>
         | 
| 17 | 
            +
              <% end %>
         | 
| 18 | 
            +
              <br />
         | 
| 19 | 
            +
              <strong class="label">Latest successful</strong> :
         | 
| 20 | 
            +
              <% unless latest.nil? %>
         | 
| 21 | 
            +
                <a class="<%= latest.status %>" href="/projects/<%= project.basename %>/build/<%= latest.commit %>"><%= latest == current ? "current" : latest.commit %></a>
         | 
| 22 | 
            +
              <% end %>
         | 
| 23 | 
            +
              <br />
         | 
| 24 | 
            +
              <strong class="label">Integration branch</strong> :
         | 
| 25 | 
            +
              <%= project.integration_branch %>
         | 
| 26 | 
            +
              <br />
         | 
| 27 | 
            +
            </div>
         | 
| 28 | 
            +
            <div class="column">
         | 
| 29 | 
            +
              <a href="/projects/<%= project.basename %>/configure">Configure <%= project.name %></a>
         | 
| 30 | 
            +
            </div>
         | 
| 31 | 
            +
            <br class="clear"/>
         | 
| 23 32 | 
             
            <br />
         | 
| 24 33 | 
             
            <br />
         | 
| 25 34 |  | 
| 26 35 | 
             
            <h2>Build history</h2>
         | 
| 27 | 
            -
            <pre class="history terminal"><% project.log.each do |line| %><% build = nil | 
| 28 | 
            -
            <%  | 
| 29 | 
            -
            <% end %><% end %></pre>
         | 
| 36 | 
            +
            <pre class="history terminal"><% project.log.each do |line| %><% build = nil %><%= ansi_color_codes line[:graph] %><a href="/projects/<%= project.basename %>/commit/<%= line[:commit] %>"><%= line[:commit] %></a><% if (build = line[:build]) %><a class="build" href="/projects/<%= project.basename %>/build/<%= build.commit %>"><%= ansi_color_codes(line[:message]) %></a> <span class="status">[<span class="<%= build.status %>"><%= build.status %></span>] (<%= build.date %>, <%= build.author.gsub '<', '<' %>)</span><% else %><%= ansi_color_codes line[:message] %><% end %>
         | 
| 37 | 
            +
            <% end %></pre>
         | 
    
        data/lib/heidi/web.rb
    CHANGED
    
    | @@ -84,18 +84,52 @@ class Heidi | |
| 84 84 |  | 
| 85 85 | 
             
                end
         | 
| 86 86 |  | 
| 87 | 
            -
                 | 
| 88 | 
            -
                  project =  | 
| 87 | 
            +
                get '/projects/:name/commit/:commit' do
         | 
| 88 | 
            +
                  project = @heidi[params[:name]]
         | 
| 89 89 | 
             
                  if project.nil?
         | 
| 90 90 | 
             
                    return "no project by that name: #{params[:name]}"
         | 
| 91 91 | 
             
                  end
         | 
| 92 92 |  | 
| 93 | 
            -
                   | 
| 93 | 
            +
                  commit = params[:commit]
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                  erb(:commit, { :locals => {
         | 
| 96 | 
            +
                    :commit  => commit,
         | 
| 97 | 
            +
                    :project => project,
         | 
| 98 | 
            +
                    :stat    => project.stat(commit),
         | 
| 99 | 
            +
                    :diff    => project.diff(commit),
         | 
| 100 | 
            +
                  }})
         | 
| 94 101 | 
             
                end
         | 
| 95 102 |  | 
| 103 | 
            +
                get '/projects/:name/configure' do
         | 
| 104 | 
            +
                  project = @heidi[params[:name]]
         | 
| 105 | 
            +
                  if project.nil?
         | 
| 106 | 
            +
                    return "no project by that name: #{params[:name]}"
         | 
| 107 | 
            +
                  end
         | 
| 108 | 
            +
             | 
| 109 | 
            +
                  erb(:config, { :locals => { :project => project } } )
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                post '/projects/:project_name' do
         | 
| 113 | 
            +
                  # update project
         | 
| 114 | 
            +
                  project = @heidi[params[:project_name]]
         | 
| 115 | 
            +
                  if project.nil?
         | 
| 116 | 
            +
                    return "no project by that name: #{params[:project_name]}"
         | 
| 117 | 
            +
                  end
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                  project.name = params[:name]
         | 
| 120 | 
            +
                  project.integration_branch = params[:branch]
         | 
| 121 | 
            +
             | 
| 122 | 
            +
             | 
| 123 | 
            +
                  redirect "/projects/#{project.basename}", 302
         | 
| 124 | 
            +
                end
         | 
| 96 125 |  | 
| 97 126 | 
             
                helpers do
         | 
| 127 | 
            +
                  include Rack::Utils
         | 
| 128 | 
            +
                  alias_method :h, :escape_html
         | 
| 129 | 
            +
             | 
| 98 130 | 
             
                  def ansi_color_codes(string)
         | 
| 131 | 
            +
                    return "" if string.nil?
         | 
| 132 | 
            +
             | 
| 99 133 | 
             
                    string.gsub(/\e\[0?m/, '</span>').
         | 
| 100 134 | 
             
                      gsub /\e\[[^m]+m/ do |codes|
         | 
| 101 135 | 
             
                        colors = codes.gsub(/[\e\[m]+/, '')
         | 
    
        metadata
    CHANGED
    
    | @@ -1,116 +1,116 @@ | |
| 1 | 
            -
            --- !ruby/object:Gem::Specification
         | 
| 1 | 
            +
            --- !ruby/object:Gem::Specification 
         | 
| 2 2 | 
             
            name: heidi
         | 
| 3 | 
            -
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.2.1
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version 
         | 
| 5 4 | 
             
              prerelease: 
         | 
| 5 | 
            +
              version: 0.3.0
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 | 
            -
            authors:
         | 
| 7 | 
            +
            authors: 
         | 
| 8 8 | 
             
            - Hartog C. de Mik
         | 
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 12 | 
            +
             | 
| 13 | 
            +
            date: 2012-02-14 00:00:00 Z
         | 
| 14 | 
            +
            dependencies: 
         | 
| 15 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 15 16 | 
             
              name: thin
         | 
| 16 | 
            -
              requirement: & | 
| 17 | 
            +
              requirement: &id001 !ruby/object:Gem::Requirement 
         | 
| 17 18 | 
             
                none: false
         | 
| 18 | 
            -
                requirements:
         | 
| 19 | 
            -
                - -  | 
| 20 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 21 | 
            -
                    version:  | 
| 19 | 
            +
                requirements: 
         | 
| 20 | 
            +
                - - ">="
         | 
| 21 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 22 | 
            +
                    version: "0"
         | 
| 22 23 | 
             
              type: :runtime
         | 
| 23 24 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 25 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 25 | 
            +
              version_requirements: *id001
         | 
| 26 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 26 27 | 
             
              name: sinatra
         | 
| 27 | 
            -
              requirement: & | 
| 28 | 
            +
              requirement: &id002 !ruby/object:Gem::Requirement 
         | 
| 28 29 | 
             
                none: false
         | 
| 29 | 
            -
                requirements:
         | 
| 30 | 
            -
                - -  | 
| 31 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 32 | 
            -
                    version:  | 
| 30 | 
            +
                requirements: 
         | 
| 31 | 
            +
                - - ">="
         | 
| 32 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 33 | 
            +
                    version: "0"
         | 
| 33 34 | 
             
              type: :runtime
         | 
| 34 35 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 36 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 36 | 
            +
              version_requirements: *id002
         | 
| 37 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 37 38 | 
             
              name: simple_shell
         | 
| 38 | 
            -
              requirement: & | 
| 39 | 
            +
              requirement: &id003 !ruby/object:Gem::Requirement 
         | 
| 39 40 | 
             
                none: false
         | 
| 40 | 
            -
                requirements:
         | 
| 41 | 
            -
                - -  | 
| 42 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 43 | 
            -
                    version:  | 
| 41 | 
            +
                requirements: 
         | 
| 42 | 
            +
                - - ">="
         | 
| 43 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 44 | 
            +
                    version: "0"
         | 
| 44 45 | 
             
              type: :runtime
         | 
| 45 46 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 47 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 47 | 
            +
              version_requirements: *id003
         | 
| 48 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 48 49 | 
             
              name: rspec
         | 
| 49 | 
            -
              requirement: & | 
| 50 | 
            +
              requirement: &id004 !ruby/object:Gem::Requirement 
         | 
| 50 51 | 
             
                none: false
         | 
| 51 | 
            -
                requirements:
         | 
| 52 | 
            +
                requirements: 
         | 
| 52 53 | 
             
                - - ~>
         | 
| 53 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 54 55 | 
             
                    version: 2.8.0
         | 
| 55 56 | 
             
              type: :development
         | 
| 56 57 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 58 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 58 | 
            +
              version_requirements: *id004
         | 
| 59 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 59 60 | 
             
              name: rdoc
         | 
| 60 | 
            -
              requirement: & | 
| 61 | 
            +
              requirement: &id005 !ruby/object:Gem::Requirement 
         | 
| 61 62 | 
             
                none: false
         | 
| 62 | 
            -
                requirements:
         | 
| 63 | 
            +
                requirements: 
         | 
| 63 64 | 
             
                - - ~>
         | 
| 64 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 65 | 
            -
                    version:  | 
| 65 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 66 | 
            +
                    version: "3.12"
         | 
| 66 67 | 
             
              type: :development
         | 
| 67 68 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 69 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 69 | 
            +
              version_requirements: *id005
         | 
| 70 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 70 71 | 
             
              name: bundler
         | 
| 71 | 
            -
              requirement: & | 
| 72 | 
            +
              requirement: &id006 !ruby/object:Gem::Requirement 
         | 
| 72 73 | 
             
                none: false
         | 
| 73 | 
            -
                requirements:
         | 
| 74 | 
            +
                requirements: 
         | 
| 74 75 | 
             
                - - ~>
         | 
| 75 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 76 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 76 77 | 
             
                    version: 1.0.0
         | 
| 77 78 | 
             
              type: :development
         | 
| 78 79 | 
             
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: * | 
| 80 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 80 | 
            +
              version_requirements: *id006
         | 
| 81 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 81 82 | 
             
              name: jeweler
         | 
| 82 | 
            -
              requirement: & | 
| 83 | 
            +
              requirement: &id007 !ruby/object:Gem::Requirement 
         | 
| 83 84 | 
             
                none: false
         | 
| 84 | 
            -
                requirements:
         | 
| 85 | 
            +
                requirements: 
         | 
| 85 86 | 
             
                - - ~>
         | 
| 86 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 87 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 87 88 | 
             
                    version: 1.8.3
         | 
| 88 89 | 
             
              type: :development
         | 
| 89 90 | 
             
              prerelease: false
         | 
| 90 | 
            -
              version_requirements: * | 
| 91 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 91 | 
            +
              version_requirements: *id007
         | 
| 92 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 92 93 | 
             
              name: rcov
         | 
| 93 | 
            -
              requirement: & | 
| 94 | 
            +
              requirement: &id008 !ruby/object:Gem::Requirement 
         | 
| 94 95 | 
             
                none: false
         | 
| 95 | 
            -
                requirements:
         | 
| 96 | 
            -
                - -  | 
| 97 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 98 | 
            -
                    version:  | 
| 96 | 
            +
                requirements: 
         | 
| 97 | 
            +
                - - ">="
         | 
| 98 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 99 | 
            +
                    version: "0"
         | 
| 99 100 | 
             
              type: :development
         | 
| 100 101 | 
             
              prerelease: false
         | 
| 101 | 
            -
              version_requirements: * | 
| 102 | 
            +
              version_requirements: *id008
         | 
| 102 103 | 
             
            description: CI-Joe alike CI system called Heidi.
         | 
| 103 104 | 
             
            email: hartog@organisedminds.com
         | 
| 104 | 
            -
            executables:
         | 
| 105 | 
            +
            executables: 
         | 
| 105 106 | 
             
            - heidi
         | 
| 106 | 
            -
            - heidi_console
         | 
| 107 | 
            -
            - heidi_cron
         | 
| 108 107 | 
             
            - heidi_web
         | 
| 109 108 | 
             
            extensions: []
         | 
| 110 | 
            -
             | 
| 109 | 
            +
             | 
| 110 | 
            +
            extra_rdoc_files: 
         | 
| 111 111 | 
             
            - LICENSE.txt
         | 
| 112 112 | 
             
            - README.rdoc
         | 
| 113 | 
            -
            files:
         | 
| 113 | 
            +
            files: 
         | 
| 114 114 | 
             
            - .document
         | 
| 115 115 | 
             
            - .rspec
         | 
| 116 116 | 
             
            - Gemfile
         | 
| @@ -120,8 +120,6 @@ files: | |
| 120 120 | 
             
            - Rakefile
         | 
| 121 121 | 
             
            - VERSION
         | 
| 122 122 | 
             
            - bin/heidi
         | 
| 123 | 
            -
            - bin/heidi_console
         | 
| 124 | 
            -
            - bin/heidi_cron
         | 
| 125 123 | 
             
            - bin/heidi_web
         | 
| 126 124 | 
             
            - heidi.gemspec
         | 
| 127 125 | 
             
            - lib/heidi.rb
         | 
| @@ -139,6 +137,8 @@ files: | |
| 139 137 | 
             
            - lib/heidi/web/public/images/OrganisedMinds.png
         | 
| 140 138 | 
             
            - lib/heidi/web/public/images/heidi.jpeg
         | 
| 141 139 | 
             
            - lib/heidi/web/views/build.erb
         | 
| 140 | 
            +
            - lib/heidi/web/views/commit.erb
         | 
| 141 | 
            +
            - lib/heidi/web/views/config.erb
         | 
| 142 142 | 
             
            - lib/heidi/web/views/home.erb
         | 
| 143 143 | 
             
            - lib/heidi/web/views/layout.erb
         | 
| 144 144 | 
             
            - lib/heidi/web/views/project.erb
         | 
| @@ -153,31 +153,34 @@ files: | |
| 153 153 | 
             
            - spec/heidi_spec.rb
         | 
| 154 154 | 
             
            - spec/spec_helper.rb
         | 
| 155 155 | 
             
            homepage: http://github.com/coffeeaddict/heid
         | 
| 156 | 
            -
            licenses:
         | 
| 156 | 
            +
            licenses: 
         | 
| 157 157 | 
             
            - MIT
         | 
| 158 158 | 
             
            post_install_message: 
         | 
| 159 159 | 
             
            rdoc_options: []
         | 
| 160 | 
            -
             | 
| 160 | 
            +
             | 
| 161 | 
            +
            require_paths: 
         | 
| 161 162 | 
             
            - lib
         | 
| 162 | 
            -
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 163 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement 
         | 
| 163 164 | 
             
              none: false
         | 
| 164 | 
            -
              requirements:
         | 
| 165 | 
            -
              - -  | 
| 166 | 
            -
                - !ruby/object:Gem::Version
         | 
| 167 | 
            -
                   | 
| 168 | 
            -
                  segments:
         | 
| 165 | 
            +
              requirements: 
         | 
| 166 | 
            +
              - - ">="
         | 
| 167 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 168 | 
            +
                  hash: 2807118662915516022
         | 
| 169 | 
            +
                  segments: 
         | 
| 169 170 | 
             
                  - 0
         | 
| 170 | 
            -
                   | 
| 171 | 
            -
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 171 | 
            +
                  version: "0"
         | 
| 172 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement 
         | 
| 172 173 | 
             
              none: false
         | 
| 173 | 
            -
              requirements:
         | 
| 174 | 
            -
              - -  | 
| 175 | 
            -
                - !ruby/object:Gem::Version
         | 
| 176 | 
            -
                  version:  | 
| 174 | 
            +
              requirements: 
         | 
| 175 | 
            +
              - - ">="
         | 
| 176 | 
            +
                - !ruby/object:Gem::Version 
         | 
| 177 | 
            +
                  version: "0"
         | 
| 177 178 | 
             
            requirements: []
         | 
| 179 | 
            +
             | 
| 178 180 | 
             
            rubyforge_project: 
         | 
| 179 | 
            -
            rubygems_version: 1.8. | 
| 181 | 
            +
            rubygems_version: 1.8.16
         | 
| 180 182 | 
             
            signing_key: 
         | 
| 181 183 | 
             
            specification_version: 3
         | 
| 182 184 | 
             
            summary: A naive CI system
         | 
| 183 185 | 
             
            test_files: []
         | 
| 186 | 
            +
             | 
    
        data/bin/heidi_console
    DELETED