projmgr 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/NEWS.markdown +4 -0
- data/README.markdown +23 -19
- data/Rakefile +1 -0
- data/TODO.markdown +1 -2
- data/bin/projmgr +6 -5
- data/lib/projmgr.rb +1 -1
- data/lib/projmgr/cvs.rb +38 -21
- data/lib/projmgr/git.rb +17 -17
- data/lib/projmgr/svn.rb +19 -15
- data/projmgr.gemspec +20 -21
- metadata +3 -3
data/NEWS.markdown
CHANGED
data/README.markdown
CHANGED
@@ -1,25 +1,20 @@
|
|
1
|
-
ProjMgr
|
2
|
-
|
1
|
+
# ProjMgr
|
2
|
+
|
3
3
|
|
4
4
|
ProjMgr is a simple source code project manager for updating and checking local changes on multiple projects at once.
|
5
5
|
|
6
|
-
The current version is v0.0.
|
6
|
+
The current version is v0.0.8
|
7
7
|
|
8
|
-
Requirements
|
9
|
-
---
|
8
|
+
## Requirements
|
10
9
|
|
11
|
-
* ruby
|
12
|
-
* rubygems
|
13
|
-
* choice
|
10
|
+
* ruby / rubygems
|
14
11
|
|
15
|
-
Installation
|
16
|
-
---
|
12
|
+
## Installation
|
17
13
|
Installation is really easy just gem install!
|
18
14
|
|
19
|
-
%
|
15
|
+
% gem install projmgr
|
20
16
|
|
21
|
-
Usage
|
22
|
-
---
|
17
|
+
## Usage
|
23
18
|
Using ProjMgr is fairly simple. Once installation is complete type to create a skeleton config file:
|
24
19
|
|
25
20
|
% projmgr --create-file
|
@@ -40,6 +35,18 @@ This will create a empty skeleton config file, ~/.projmgr, edit this file. The f
|
|
40
35
|
type: git
|
41
36
|
url: git@github.com:hammackj/nessusdb.git
|
42
37
|
|
38
|
+
metasploit:
|
39
|
+
name: metasploit
|
40
|
+
path: ~/Projects/public/metasploit
|
41
|
+
type: svn
|
42
|
+
url: https://www.metasploit.com/svn/framework3/trunk/
|
43
|
+
|
44
|
+
cvstest:
|
45
|
+
name: cvstest
|
46
|
+
path: ~/Projects/public/cvstest
|
47
|
+
type: cvs
|
48
|
+
url: hammackj@hammackj.com:/usr/local/cvs
|
49
|
+
|
43
50
|
projectname:
|
44
51
|
name:
|
45
52
|
path:
|
@@ -58,16 +65,14 @@ Once the config file is edited everything is ready to go.
|
|
58
65
|
|
59
66
|
Simple usage is as follows:
|
60
67
|
|
61
|
-
Checking for local changes
|
62
|
-
----
|
68
|
+
### Checking for local changes
|
63
69
|
|
64
70
|
% projmgr -c
|
65
71
|
[!] ProjMgr has local changes
|
66
72
|
[!] nessusdb has local changes
|
67
73
|
|
68
74
|
|
69
|
-
Updating each project
|
70
|
-
----
|
75
|
+
### Updating each project
|
71
76
|
|
72
77
|
% projmgr -u
|
73
78
|
[*] Updating ProjMgr...
|
@@ -77,6 +82,5 @@ Updating each project
|
|
77
82
|
|
78
83
|
That covers all of the basic usage of ProjMgr.
|
79
84
|
|
80
|
-
Contact
|
81
|
-
---
|
85
|
+
## Contact
|
82
86
|
You can reach me at jacob[dot]hammack[at]hammackj[dot]com.
|
data/Rakefile
CHANGED
data/TODO.markdown
CHANGED
data/bin/projmgr
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# encoding: utf-8
|
3
2
|
|
4
3
|
# projmgr - ProjMgr is a simple source code project manager for updating and checking local changes on multiple projects at once.
|
5
4
|
# Jacob Hammack <jacob.hammack@hammackj.com>
|
@@ -11,6 +10,8 @@
|
|
11
10
|
# hammackj - 01-09-2011 - Version 0.0.4
|
12
11
|
# hammackj - 02-07-2011 - Version 0.0.5
|
13
12
|
# hammackj - 02-17-2011 - Version 0.0.6
|
13
|
+
# hammackj - 03-17-2011 - Version 0.0.7
|
14
|
+
# hammackj - 05-10-2011 - Version 0.0.8
|
14
15
|
#
|
15
16
|
|
16
17
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '/../lib'))
|
@@ -63,7 +64,7 @@ module ProjMgr
|
|
63
64
|
if File.exists?(File.expand_path(CONFIG_FILE)) == false
|
64
65
|
File.open(File.expand_path(CONFIG_FILE), 'w+') do |f|
|
65
66
|
3.times do
|
66
|
-
f.write("projectname: \n
|
67
|
+
f.write("projectname: \n name: \n path: \n type: \n url: \n\n")
|
67
68
|
end
|
68
69
|
end
|
69
70
|
|
@@ -113,8 +114,8 @@ module ProjMgr
|
|
113
114
|
repo = Svn.new @repos[key]['name'], @repos[key]['path'], @root, @repos[key]['url']
|
114
115
|
elsif @repos[key]['type'] == "git"
|
115
116
|
repo = Git.new @repos[key]['name'], @repos[key]['path'], @root, @repos[key]['url']
|
116
|
-
|
117
|
-
|
117
|
+
elsif @repos[key]['type'] == "cvs"
|
118
|
+
repo = Cvs.new @repos[key]['name'], @repos[key]['path'], @repos[key]['root'], @repos[key]['url']
|
118
119
|
end
|
119
120
|
|
120
121
|
if repo == nil
|
@@ -131,7 +132,7 @@ module ProjMgr
|
|
131
132
|
# print "[!] #{@repos[key]['name']} #{status[1]}\n"
|
132
133
|
end
|
133
134
|
elsif @options[:update] != nil
|
134
|
-
print "[*] Updating #{@repos[key]['name']}
|
135
|
+
print "[*] Updating #{@repos[key]['name']}...#{repo.update}\n"
|
135
136
|
elsif @options[:checkout] != nil
|
136
137
|
print "[*] Checking out #{@repos[key]['name']}...#{repo.checkout}\n"
|
137
138
|
end
|
data/lib/projmgr.rb
CHANGED
data/lib/projmgr/cvs.rb
CHANGED
@@ -13,39 +13,56 @@ module ProjMgr
|
|
13
13
|
#
|
14
14
|
# @return [String] The results from the 'cvs co' command
|
15
15
|
def checkout
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
if path_exists? == true
|
17
|
+
return "path exists, cannot checkout onto an existing repo"
|
18
|
+
else
|
19
|
+
parent = project_parent_directory
|
20
|
+
|
21
|
+
cmd = IO.popen "cd #{parent} && CVSROOT=#{@url} cvs co #{@project} &> /dev/null && cd #{@root}"
|
22
|
+
results = cmd.readlines
|
23
|
+
cmd.close
|
24
|
+
|
25
|
+
return "project checked out to #{parent}/#{@project}"
|
26
|
+
end
|
19
27
|
end
|
20
28
|
|
21
29
|
# Checks for updates in the target repo
|
22
30
|
#
|
23
|
-
# @return [String] the results of '
|
31
|
+
# @return [String] the results of 'cvs update' on the target repository
|
24
32
|
def update
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
33
|
+
if path_exists? == false
|
34
|
+
return "path does not exists, cannot update repository"
|
35
|
+
else
|
36
|
+
results = `cd #{@path} && cvs update 2>&1 && cd #{@root}`
|
37
|
+
results = results.split("\n")
|
38
|
+
|
39
|
+
results.delete_if do |x|
|
40
|
+
x =~ /cvs update: /
|
41
|
+
end
|
42
|
+
|
43
|
+
if results.empty?
|
44
|
+
return "Already up-to-date!"
|
45
|
+
else
|
46
|
+
return results
|
47
|
+
end
|
48
|
+
end
|
32
49
|
end
|
33
50
|
|
34
51
|
# Checks for local changes in the target repository
|
35
52
|
#
|
36
53
|
# @return [Boolean] if there is local changes or not
|
37
54
|
def has_local_changes?
|
38
|
-
|
55
|
+
if path_exists? == false
|
56
|
+
return false, "path does not exists, please check the path or check it out"
|
57
|
+
else
|
58
|
+
results = `cd #{@path} && cvs -q status | grep ^[?F] | grep -v \"to-date\" && cd #{@root}`
|
39
59
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
#else
|
47
|
-
return false
|
48
|
-
#end
|
60
|
+
if results =~ /\? (.*)/
|
61
|
+
return true, "has local changes"
|
62
|
+
else
|
63
|
+
return false, "has no local changes"
|
64
|
+
end
|
65
|
+
end
|
49
66
|
end
|
50
67
|
end
|
51
68
|
end
|
data/lib/projmgr/git.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'projmgr/scm'
|
4
4
|
|
5
5
|
module ProjMgr
|
6
|
-
|
6
|
+
|
7
7
|
# A wrapper class for interacting with a git repository
|
8
8
|
#
|
9
9
|
# @author Jacob Hammack <jacob.hammack@hammackj.com>
|
@@ -18,51 +18,51 @@ module ProjMgr
|
|
18
18
|
return "path exists, cannot checkout onto an existing repo"
|
19
19
|
else
|
20
20
|
parent = project_parent_directory
|
21
|
-
|
21
|
+
|
22
22
|
cmd = IO.popen "cd #{parent} && git clone #{@url} &> /dev/null && cd #{@root}"
|
23
23
|
results = cmd.readlines
|
24
24
|
cmd.close
|
25
|
-
|
25
|
+
|
26
26
|
return "project checked out to #{parent}/#{@project}"
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
30
|
# Checks for updates in the target repository
|
31
|
-
#
|
31
|
+
#
|
32
32
|
# @return [String] the results of 'git pull' on the target repository
|
33
33
|
def update
|
34
34
|
if path_exists? == false
|
35
35
|
return "path does not exists, cannot update repository"
|
36
36
|
else
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
37
|
+
results = `cd #{@path} && git pull && cd #{@root}`
|
38
|
+
|
39
|
+
if results =~ /Already up-to-date./
|
40
|
+
return "Already up-to-date!"
|
41
|
+
else
|
42
|
+
return results
|
43
|
+
end
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
46
|
+
|
47
47
|
# Checks for local changes in the target repository
|
48
48
|
#
|
49
49
|
# @return [Boolean] if there is local changes or not
|
50
50
|
def has_local_changes?
|
51
|
-
if path_exists? == false
|
51
|
+
if path_exists? == false
|
52
52
|
return false, "path does not exists, please check the path or check it out"
|
53
53
|
else
|
54
|
-
|
54
|
+
results = `cd #{@path} && git status && cd #{@root}`
|
55
55
|
|
56
|
-
|
56
|
+
if results !~ /nothing to commit/
|
57
57
|
return true, "has local changes"
|
58
58
|
elsif results =~ /Your branch is ahead of/
|
59
59
|
return true, "has local changes"
|
60
60
|
elsif results =~ /Untracked files/
|
61
61
|
return true, "has local changes"
|
62
|
-
|
62
|
+
else
|
63
63
|
return false, "has no local changes"
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
67
|
-
end
|
67
|
+
end
|
68
68
|
end
|
data/lib/projmgr/svn.rb
CHANGED
@@ -3,23 +3,23 @@
|
|
3
3
|
require 'projmgr/scm'
|
4
4
|
|
5
5
|
module ProjMgr
|
6
|
-
|
6
|
+
|
7
7
|
# A parent class for interacting with a source code repository
|
8
8
|
#
|
9
9
|
# @author Jacob Hammack <jacob.hammack@hammackj.com>
|
10
10
|
class Svn < Scm
|
11
|
-
|
11
|
+
|
12
12
|
# Checks out a svn repo and places it, in the path specified by the @path variable
|
13
13
|
#
|
14
14
|
# @return [String] The results from the 'svn checkout' command
|
15
15
|
def checkout
|
16
16
|
if path_exists? == true
|
17
17
|
return "path exists, cannot checkout onto an existing repo"
|
18
|
-
else
|
19
|
-
parent = project_parent_directory
|
20
|
-
|
18
|
+
else
|
19
|
+
parent = project_parent_directory
|
20
|
+
|
21
21
|
results = `cd #{parent} && svn checkout #{@url} #{@project} && cd #{@root}`
|
22
|
-
|
22
|
+
|
23
23
|
if results =~ /Could not resolve hostname/
|
24
24
|
return "unable to resolve hostname"
|
25
25
|
else
|
@@ -27,18 +27,22 @@ module ProjMgr
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
# Checks for updates in the target repo
|
32
|
-
#
|
32
|
+
#
|
33
33
|
# @return [String] the results of 'git pull' on the target repository
|
34
34
|
def update
|
35
35
|
if path_exists? == true
|
36
|
-
|
37
|
-
else
|
36
|
+
results = `cd #{@path} && svn stat && svn update && cd #{@root}`
|
37
|
+
else
|
38
38
|
return "path does not exists, cannot update repository"
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
end
|
40
|
+
|
41
|
+
if results.split("\n").size == 1
|
42
|
+
return results.chomp
|
43
|
+
else
|
44
|
+
return "\n" + results
|
45
|
+
end
|
42
46
|
end
|
43
47
|
|
44
48
|
# Checks for local changes in the target repository
|
@@ -47,9 +51,9 @@ module ProjMgr
|
|
47
51
|
def has_local_changes?
|
48
52
|
if path_exists? == false
|
49
53
|
return false, "Path does not exists, please check the path or check it out"
|
50
|
-
else
|
54
|
+
else
|
51
55
|
results = `cd #{@path} && svn stat && cd #{@root}`
|
52
|
-
|
56
|
+
|
53
57
|
if results.length > 0
|
54
58
|
return true, "has local changes"
|
55
59
|
else
|
data/projmgr.gemspec
CHANGED
@@ -6,28 +6,27 @@ $:.unshift(File.join(File.dirname(base), 'lib'))
|
|
6
6
|
require 'projmgr'
|
7
7
|
|
8
8
|
Gem::Specification.new do |s|
|
9
|
-
s.name
|
10
|
-
s.version
|
11
|
-
s.homepage
|
12
|
-
s.summary
|
13
|
-
s.description
|
9
|
+
s.name = ProjMgr::APP_NAME
|
10
|
+
s.version = ProjMgr::VERSION
|
11
|
+
s.homepage = "http://github.com/hammackj/projmgr/"
|
12
|
+
s.summary = ProjMgr::APP_NAME
|
13
|
+
s.description = "#{ProjMgr::APP_NAME} is a source code managment tool for automating project managment"
|
14
14
|
s.license = "BSD"
|
15
|
-
|
16
|
-
s.author
|
17
|
-
s.email
|
18
|
-
|
19
|
-
s.files
|
20
|
-
s.default_executable
|
21
|
-
s.executables
|
22
|
-
s.require_paths
|
23
|
-
|
24
|
-
s.required_rubygems_version = ">= 1.
|
25
|
-
s.rubyforge_project
|
26
|
-
|
15
|
+
|
16
|
+
s.author = "Jacob Hammack"
|
17
|
+
s.email = "jacob.hammack@hammackj.com"
|
18
|
+
|
19
|
+
s.files = Dir['[A-Z]*'] + Dir['lib/**/*'] + ['projmgr.gemspec']
|
20
|
+
s.default_executable = ProjMgr::APP_NAME
|
21
|
+
s.executables = [ProjMgr::APP_NAME]
|
22
|
+
s.require_paths = ["lib"]
|
23
|
+
|
24
|
+
s.required_rubygems_version = ">= 1.5.2"
|
25
|
+
s.rubyforge_project = ProjMgr::APP_NAME
|
26
|
+
|
27
27
|
s.add_development_dependency("rspec", ">= 2.5.0")
|
28
28
|
s.add_development_dependency("rcov", ">= 0.9.9")
|
29
|
-
|
30
|
-
s.has_rdoc
|
31
|
-
s.extra_rdoc_files
|
32
|
-
|
29
|
+
|
30
|
+
s.has_rdoc = 'yard'
|
31
|
+
s.extra_rdoc_files = ["README.markdown", "LICENSE", "NEWS.markdown", "TODO.markdown"]
|
33
32
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: projmgr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jacob Hammack
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
13
|
+
date: 2011-05-10 00:00:00 -05:00
|
14
14
|
default_executable: projmgr
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -79,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
82
|
+
version: 1.5.2
|
83
83
|
requirements: []
|
84
84
|
|
85
85
|
rubyforge_project: projmgr
|