catbird 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/catbird +24 -0
- data/catbird-gui.vala +50 -0
- data/extconf.rb +20 -0
- data/src/app.rb +54 -0
- data/src/config.ru +2 -0
- data/src/models/all.rb +13 -0
- data/src/models/repo.rb +35 -0
- data/src/public/branches-icon.png +0 -0
- data/src/public/changes-icon.png +0 -0
- data/src/public/history-icon.png +0 -0
- data/src/public/settings-icon.png +0 -0
- data/src/public/sidebar-background.png +0 -0
- data/src/views/branches.erb +0 -0
- data/src/views/changes.erb +0 -0
- data/src/views/history.erb +7 -0
- data/src/views/layout.erb +120 -0
- data/src/views/repo_list.erb +10 -0
- data/src/views/settings.erb +0 -0
- data/src/views/tab.erb +8 -0
- metadata +68 -0
    
        data/catbird
    ADDED
    
    | @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # FIXME: This is sooo hacky...
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            Dir.chdir File.dirname(__FILE__) do
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            system '
         | 
| 8 | 
            +
            # Start the server
         | 
| 9 | 
            +
            cd src
         | 
| 10 | 
            +
            thin start --daemonize --debug
         | 
| 11 | 
            +
            cd ..
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            # Start the gui
         | 
| 14 | 
            +
            ./catbird-gui
         | 
| 15 | 
            +
             | 
| 16 | 
            +
             | 
| 17 | 
            +
            # When the app closes, stop the server and delete leftover logs
         | 
| 18 | 
            +
            cd src
         | 
| 19 | 
            +
            thin stop
         | 
| 20 | 
            +
            rm -r log
         | 
| 21 | 
            +
            rm -r tmp
         | 
| 22 | 
            +
            '
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            end
         | 
    
        data/catbird-gui.vala
    ADDED
    
    | @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            using Gtk;
         | 
| 2 | 
            +
            using WebKit;
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            public class CatbirdWindow : Window {
         | 
| 5 | 
            +
                private WebView web_view;
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                public CatbirdWindow () {
         | 
| 8 | 
            +
                    this.title = "Catbird";
         | 
| 9 | 
            +
                    set_default_size (800, 600);
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                    create_widgets ();
         | 
| 12 | 
            +
                    connect_signals ();
         | 
| 13 | 
            +
                }
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                private void create_widgets () {
         | 
| 16 | 
            +
                    this.web_view = new WebView ();
         | 
| 17 | 
            +
                    var scrolled_window = new ScrolledWindow (null, null);
         | 
| 18 | 
            +
                    scrolled_window.set_policy (PolicyType.AUTOMATIC, PolicyType.AUTOMATIC);
         | 
| 19 | 
            +
                    scrolled_window.add (this.web_view);
         | 
| 20 | 
            +
                    add (scrolled_window);
         | 
| 21 | 
            +
                }
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                private void connect_signals () {
         | 
| 24 | 
            +
                    this.destroy.connect (Gtk.main_quit);
         | 
| 25 | 
            +
                    
         | 
| 26 | 
            +
                    this.web_view.load_error.connect ((view, frame, uri, error) => {
         | 
| 27 | 
            +
                      Thread.usleep (200000);
         | 
| 28 | 
            +
                      
         | 
| 29 | 
            +
                      this.web_view.load_uri ("http://localhost:3000");
         | 
| 30 | 
            +
                      
         | 
| 31 | 
            +
                      return true;
         | 
| 32 | 
            +
                    });
         | 
| 33 | 
            +
                }
         | 
| 34 | 
            +
                
         | 
| 35 | 
            +
                public void run () {
         | 
| 36 | 
            +
                    show_all ();
         | 
| 37 | 
            +
                    this.web_view.open ("http://localhost:3000");
         | 
| 38 | 
            +
                }
         | 
| 39 | 
            +
             | 
| 40 | 
            +
                public static int main (string[] args) {
         | 
| 41 | 
            +
                    Gtk.init (ref args);
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    var catbird = new CatbirdWindow ();
         | 
| 44 | 
            +
                    catbird.run ();
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                    Gtk.main ();
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    return 0;
         | 
| 49 | 
            +
                }
         | 
| 50 | 
            +
            }
         | 
    
        data/extconf.rb
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            #!/usr/bin/env ruby
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'mkmf'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            # Make sure we are in the right directory
         | 
| 6 | 
            +
            Dir.chdir File.dirname(__FILE__) do
         | 
| 7 | 
            +
              
         | 
| 8 | 
            +
              system "  
         | 
| 9 | 
            +
                echo 'Installing system packages.  You will be prompted for your password...'
         | 
| 10 | 
            +
                sudo apt-get update -y
         | 
| 11 | 
            +
                sudo apt-get install build-essential bison openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev -y
         | 
| 12 | 
            +
                sudo apt-get install valac libgtk2.0-dev libwebkitgtk-dev -y
         | 
| 13 | 
            +
                
         | 
| 14 | 
            +
                echo 'Compiling app...'
         | 
| 15 | 
            +
                ls
         | 
| 16 | 
            +
                valac --pkg gtk+-2.0 --pkg webkit-1.0 --thread catbird-gui.vala
         | 
| 17 | 
            +
              "
         | 
| 18 | 
            +
            end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            create_makefile 'foobar'
         | 
    
        data/src/app.rb
    ADDED
    
    | @@ -0,0 +1,54 @@ | |
| 1 | 
            +
            require 'sinatra'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require './models/all.rb'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            enable :sessions
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            get '/' do
         | 
| 8 | 
            +
              redirect '/repos'
         | 
| 9 | 
            +
            end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            get '/repos' do
         | 
| 12 | 
            +
              @repos = Repo.all
         | 
| 13 | 
            +
              erb :repo_list
         | 
| 14 | 
            +
            end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            get '/repos/choose/:repo_id' do
         | 
| 17 | 
            +
              session[:repo_id] = params[:repo_id]
         | 
| 18 | 
            +
              redirect '/history'
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            get '*' do
         | 
| 22 | 
            +
              @repo = Repo.get session[:repo_id]
         | 
| 23 | 
            +
              if @repo.nil?
         | 
| 24 | 
            +
                redirect '/repos'
         | 
| 25 | 
            +
              else
         | 
| 26 | 
            +
                pass
         | 
| 27 | 
            +
              end
         | 
| 28 | 
            +
            end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            get '/history' do
         | 
| 31 | 
            +
              @current_tab = 'history'
         | 
| 32 | 
            +
              erb :history
         | 
| 33 | 
            +
            end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            get '/changes' do
         | 
| 36 | 
            +
              @current_tab = 'changes'
         | 
| 37 | 
            +
              erb :changes
         | 
| 38 | 
            +
            end
         | 
| 39 | 
            +
             | 
| 40 | 
            +
            get '/branches' do
         | 
| 41 | 
            +
              @current_tab = 'branches'
         | 
| 42 | 
            +
              erb :branches
         | 
| 43 | 
            +
            end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
            get '/settings' do
         | 
| 46 | 
            +
              @current_tab = 'settings'
         | 
| 47 | 
            +
              erb :settings
         | 
| 48 | 
            +
            end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
            helpers do
         | 
| 51 | 
            +
              def tabs
         | 
| 52 | 
            +
                %w{history changes branches settings}
         | 
| 53 | 
            +
              end
         | 
| 54 | 
            +
            end
         | 
    
        data/src/config.ru
    ADDED
    
    
    
        data/src/models/all.rb
    ADDED
    
    
    
        data/src/models/repo.rb
    ADDED
    
    | @@ -0,0 +1,35 @@ | |
| 1 | 
            +
            class Repo
         | 
| 2 | 
            +
              include DataMapper::Resource
         | 
| 3 | 
            +
              
         | 
| 4 | 
            +
              property :id, Serial  
         | 
| 5 | 
            +
              
         | 
| 6 | 
            +
              property :name, String
         | 
| 7 | 
            +
              property :description, String, default: 'No description'
         | 
| 8 | 
            +
              
         | 
| 9 | 
            +
              property :location, String
         | 
| 10 | 
            +
              property :fav, Boolean, default: false
         | 
| 11 | 
            +
              
         | 
| 12 | 
            +
              def initialize
         | 
| 13 | 
            +
                super
         | 
| 14 | 
            +
                
         | 
| 15 | 
            +
                @git_repo = nil
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
              
         | 
| 18 | 
            +
              def commits branch='master', page=1
         | 
| 19 | 
            +
                # FIXME: explain this
         | 
| 20 | 
            +
                git_repo.commits branch, 25, (25 * page) - 25
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
              
         | 
| 23 | 
            +
              def commit_all message
         | 
| 24 | 
            +
                Dir.chdir self.location do
         | 
| 25 | 
            +
                  git_repo.add '.'
         | 
| 26 | 
            +
                  git_repo.commit_all message
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
              
         | 
| 30 | 
            +
              private
         | 
| 31 | 
            +
              
         | 
| 32 | 
            +
              def git_repo
         | 
| 33 | 
            +
                @git_repo ||= Grit::Repo.new(self.location)
         | 
| 34 | 
            +
              end
         | 
| 35 | 
            +
            end
         | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| Binary file | 
| 
            File without changes
         | 
| 
            File without changes
         | 
| @@ -0,0 +1,120 @@ | |
| 1 | 
            +
            <html>
         | 
| 2 | 
            +
              <head>
         | 
| 3 | 
            +
                <title>Catbird</title>
         | 
| 4 | 
            +
              </head>
         | 
| 5 | 
            +
              
         | 
| 6 | 
            +
              <body>
         | 
| 7 | 
            +
                <style type="text/css">
         | 
| 8 | 
            +
                  * {
         | 
| 9 | 
            +
                    margin: 0;
         | 
| 10 | 
            +
                    padding: 0;
         | 
| 11 | 
            +
                  }
         | 
| 12 | 
            +
                  
         | 
| 13 | 
            +
                  body {
         | 
| 14 | 
            +
                    background-color: #dbdbdb;
         | 
| 15 | 
            +
                    width: 800px;
         | 
| 16 | 
            +
                    
         | 
| 17 | 
            +
                    font: 14px helvetica,arial,freesans,clean,sans-serif;
         | 
| 18 | 
            +
                    line-height: 1.4;
         | 
| 19 | 
            +
                  }
         | 
| 20 | 
            +
                  
         | 
| 21 | 
            +
                  #sidebar {
         | 
| 22 | 
            +
                    position: absolute;
         | 
| 23 | 
            +
                    width: 70px;
         | 
| 24 | 
            +
                    height: 100%;
         | 
| 25 | 
            +
                    overflow: hidden;
         | 
| 26 | 
            +
                    background: url(sidebar-background.png);
         | 
| 27 | 
            +
                    text-align: center;
         | 
| 28 | 
            +
                    
         | 
| 29 | 
            +
                    -webkit-box-shadow:
         | 
| 30 | 
            +
                      1px 0px 0px #343434,
         | 
| 31 | 
            +
                      2px 0px 0px #121212;
         | 
| 32 | 
            +
                  }
         | 
| 33 | 
            +
                  
         | 
| 34 | 
            +
                  #sidebar .active {
         | 
| 35 | 
            +
                    font-weight: bold;
         | 
| 36 | 
            +
                    color: white;
         | 
| 37 | 
            +
                    background: -webkit-gradient(linear, left top, left bottom, from(#383838), to(#2e2e2e));
         | 
| 38 | 
            +
                    margin-top: 1px;
         | 
| 39 | 
            +
                  }
         | 
| 40 | 
            +
                  
         | 
| 41 | 
            +
                  #sidebar .active img {
         | 
| 42 | 
            +
                    opacity: 1;
         | 
| 43 | 
            +
                  }
         | 
| 44 | 
            +
                  
         | 
| 45 | 
            +
                  #sidebar img {
         | 
| 46 | 
            +
                    opacity: 0.25;
         | 
| 47 | 
            +
                  }
         | 
| 48 | 
            +
                  
         | 
| 49 | 
            +
                  .sidebar-item {
         | 
| 50 | 
            +
                    text-align: center;
         | 
| 51 | 
            +
                    padding: 10px 0;
         | 
| 52 | 
            +
                    color: #e0e0e0;
         | 
| 53 | 
            +
                    margin-left: 1px;
         | 
| 54 | 
            +
                    
         | 
| 55 | 
            +
                    -webkit-box-shadow:
         | 
| 56 | 
            +
                      0px 1px 0 #282828,
         | 
| 57 | 
            +
                      0px 2px 0 #4d4d4d;
         | 
| 58 | 
            +
                  }
         | 
| 59 | 
            +
                  
         | 
| 60 | 
            +
                  .sidebar-item img {
         | 
| 61 | 
            +
                    padding-bottom: 5px;
         | 
| 62 | 
            +
                  }
         | 
| 63 | 
            +
                  
         | 
| 64 | 
            +
                  #main-content {
         | 
| 65 | 
            +
                    position: fixed;
         | 
| 66 | 
            +
                    left: 70px;
         | 
| 67 | 
            +
                    right: 0;
         | 
| 68 | 
            +
                    overflow: auto;
         | 
| 69 | 
            +
                  }
         | 
| 70 | 
            +
                  
         | 
| 71 | 
            +
                  #searchbar-container {
         | 
| 72 | 
            +
                    background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f4), to(#d2d2d2));
         | 
| 73 | 
            +
                    
         | 
| 74 | 
            +
                    -webkit-box-shadow: 
         | 
| 75 | 
            +
                      /* Top borders */
         | 
| 76 | 
            +
                      0px -1px 0px #fff, 0px -2px 0px #808080,
         | 
| 77 | 
            +
                      /* Bottom borders */
         | 
| 78 | 
            +
                      0px 1px 0px #dedede, 0px 2px 0px #838383, 0px 3px 0px #bebebe;
         | 
| 79 | 
            +
                    
         | 
| 80 | 
            +
                    margin: 0px;
         | 
| 81 | 
            +
                    margin-left: 2px; /* Ajust for the sidebar shadows */
         | 
| 82 | 
            +
                    margin-bottom: 10px;
         | 
| 83 | 
            +
                    
         | 
| 84 | 
            +
                    height: 50px;
         | 
| 85 | 
            +
                  }
         | 
| 86 | 
            +
                  
         | 
| 87 | 
            +
                  .repo-cell {
         | 
| 88 | 
            +
                    background: -webkit-gradient(linear, left top, left bottom, from(#f6f6f6), to(#e7e7e7));
         | 
| 89 | 
            +
                    -webkit-border-radius: .5em; 
         | 
| 90 | 
            +
                    
         | 
| 91 | 
            +
                    border: 1px solid #a1a1a1;
         | 
| 92 | 
            +
                    
         | 
| 93 | 
            +
                    margin-left:    15px;
         | 
| 94 | 
            +
                    margin-right:   15px;
         | 
| 95 | 
            +
                    margin-bottom:  2px;
         | 
| 96 | 
            +
                    
         | 
| 97 | 
            +
                    padding: 10px 20px;
         | 
| 98 | 
            +
                  }
         | 
| 99 | 
            +
                  
         | 
| 100 | 
            +
                  a {
         | 
| 101 | 
            +
                    text-decoration: none;
         | 
| 102 | 
            +
                    color: black;
         | 
| 103 | 
            +
                  }
         | 
| 104 | 
            +
                </style>
         | 
| 105 | 
            +
                
         | 
| 106 | 
            +
                <div id="sidebar">
         | 
| 107 | 
            +
                  <% tabs.each do |tab_name| %>
         | 
| 108 | 
            +
                    <%= erb :tab, :locals => { :name => tab_name, :current => @current_tab } %>
         | 
| 109 | 
            +
                  <% end %>
         | 
| 110 | 
            +
                </div>
         | 
| 111 | 
            +
                
         | 
| 112 | 
            +
                <div id="main-content">
         | 
| 113 | 
            +
                  <div id="searchbar-container">
         | 
| 114 | 
            +
                    (insert search bar here)
         | 
| 115 | 
            +
                  </div>
         | 
| 116 | 
            +
                  
         | 
| 117 | 
            +
                  <%= yield %>
         | 
| 118 | 
            +
                </div>
         | 
| 119 | 
            +
              </body>
         | 
| 120 | 
            +
            </html>
         | 
| @@ -0,0 +1,10 @@ | |
| 1 | 
            +
            <% @repos.each do |repo| %>
         | 
| 2 | 
            +
              <a href="/repos/choose/<%= repo.id %>">
         | 
| 3 | 
            +
              <div class="repo-cell">
         | 
| 4 | 
            +
                <div class="repo-cell-content">
         | 
| 5 | 
            +
                    <strong><%= repo.name %></strong> <br />
         | 
| 6 | 
            +
                    <span style="color: #444;"><%= repo.description %></span>
         | 
| 7 | 
            +
                  </div>
         | 
| 8 | 
            +
                </div>
         | 
| 9 | 
            +
              </a>
         | 
| 10 | 
            +
            <% end %>
         | 
| 
            File without changes
         | 
    
        data/src/views/tab.erb
    ADDED
    
    
    
        metadata
    ADDED
    
    | @@ -0,0 +1,68 @@ | |
| 1 | 
            +
            --- !ruby/object:Gem::Specification
         | 
| 2 | 
            +
            name: catbird
         | 
| 3 | 
            +
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            +
              version: 0.0.1
         | 
| 5 | 
            +
              prerelease: 
         | 
| 6 | 
            +
            platform: ruby
         | 
| 7 | 
            +
            authors:
         | 
| 8 | 
            +
            - David Reed
         | 
| 9 | 
            +
            autorequire: 
         | 
| 10 | 
            +
            bindir: .
         | 
| 11 | 
            +
            cert_chain: []
         | 
| 12 | 
            +
            date: 2011-08-10 00:00:00.000000000 -05:00
         | 
| 13 | 
            +
            default_executable: 
         | 
| 14 | 
            +
            dependencies: []
         | 
| 15 | 
            +
            description: Github for Mac for Linux.  (Highly unofficial)
         | 
| 16 | 
            +
            email: dboyreed@charter.net
         | 
| 17 | 
            +
            executables:
         | 
| 18 | 
            +
            - catbird
         | 
| 19 | 
            +
            extensions:
         | 
| 20 | 
            +
            - extconf.rb
         | 
| 21 | 
            +
            extra_rdoc_files: []
         | 
| 22 | 
            +
            files:
         | 
| 23 | 
            +
            - src/models/repo.rb
         | 
| 24 | 
            +
            - src/models/all.rb
         | 
| 25 | 
            +
            - src/public/sidebar-background.png
         | 
| 26 | 
            +
            - src/public/settings-icon.png
         | 
| 27 | 
            +
            - src/public/history-icon.png
         | 
| 28 | 
            +
            - src/public/changes-icon.png
         | 
| 29 | 
            +
            - src/public/branches-icon.png
         | 
| 30 | 
            +
            - src/views/layout.erb
         | 
| 31 | 
            +
            - src/views/settings.erb
         | 
| 32 | 
            +
            - src/views/repo_list.erb
         | 
| 33 | 
            +
            - src/views/branches.erb
         | 
| 34 | 
            +
            - src/views/changes.erb
         | 
| 35 | 
            +
            - src/views/history.erb
         | 
| 36 | 
            +
            - src/views/tab.erb
         | 
| 37 | 
            +
            - src/app.rb
         | 
| 38 | 
            +
            - src/config.ru
         | 
| 39 | 
            +
            - catbird
         | 
| 40 | 
            +
            - catbird-gui.vala
         | 
| 41 | 
            +
            - extconf.rb
         | 
| 42 | 
            +
            - ./catbird
         | 
| 43 | 
            +
            has_rdoc: true
         | 
| 44 | 
            +
            homepage: https://github.com/davidboy/catbird
         | 
| 45 | 
            +
            licenses: []
         | 
| 46 | 
            +
            post_install_message: 
         | 
| 47 | 
            +
            rdoc_options: []
         | 
| 48 | 
            +
            require_paths:
         | 
| 49 | 
            +
            - lib
         | 
| 50 | 
            +
            required_ruby_version: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
              none: false
         | 
| 52 | 
            +
              requirements:
         | 
| 53 | 
            +
              - - ! '>='
         | 
| 54 | 
            +
                - !ruby/object:Gem::Version
         | 
| 55 | 
            +
                  version: '0'
         | 
| 56 | 
            +
            required_rubygems_version: !ruby/object:Gem::Requirement
         | 
| 57 | 
            +
              none: false
         | 
| 58 | 
            +
              requirements:
         | 
| 59 | 
            +
              - - ! '>='
         | 
| 60 | 
            +
                - !ruby/object:Gem::Version
         | 
| 61 | 
            +
                  version: '0'
         | 
| 62 | 
            +
            requirements: []
         | 
| 63 | 
            +
            rubyforge_project: 
         | 
| 64 | 
            +
            rubygems_version: 1.6.2
         | 
| 65 | 
            +
            signing_key: 
         | 
| 66 | 
            +
            specification_version: 3
         | 
| 67 | 
            +
            summary: A simple git client for Linux
         | 
| 68 | 
            +
            test_files: []
         |