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: []
|