amusing_git 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.
- checksums.yaml +7 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +13 -0
- data/amusing_git.gemspec +23 -0
- data/bin/amusing_git +4 -0
- data/lib/amusing_git.rb +2 -0
- data/lib/amusing_git/amuser.rb +53 -0
- data/lib/amusing_git/cli.rb +45 -0
- data/lib/amusing_git/git/git_hook.rb +30 -0
- data/lib/amusing_git/git/git_repository.rb +39 -0
- data/lib/amusing_git/message_seeder.rb +44 -0
- data/lib/amusing_git/pretty_printer.rb +23 -0
- data/lib/amusing_git/setup.rb +51 -0
- data/lib/amusing_git/version.rb +3 -0
- metadata +85 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ebb244bba979ea95783388ddb3385b541ebcd8a7
|
4
|
+
data.tar.gz: b2a840156c1e6defae8df5d6f7014b1dcd3492f4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e58a78ad0000b0f033fda86c4299321cf5343e52afc77780cd5ace99f879a7ce46c7a84ed01c984a7332901d9e42db681fe91c36977c60a84e5ba69cf164ab66
|
7
|
+
data.tar.gz: 7486e1e6e705c74cb1bf53500022176ac395636d1dad06be6cf3513f6b2f4ea84cbb5122b66e7828ca53d57968202ebf777b90947e0a75c79776026976bd5fdb
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
data/amusing_git.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require_relative './lib/amusing_git/version.rb'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'amusing_git'
|
8
|
+
s.version = AmusingGit::VERSION
|
9
|
+
s.summary = 'Brings fun to the git workflow!'
|
10
|
+
s.description = s.summary
|
11
|
+
s.authors = ['Ajit Singh']
|
12
|
+
s.email = 'jeetsingh.ajit@gamil.com'
|
13
|
+
s.license = 'MIT'
|
14
|
+
s.homepage = 'https://github.com/ajitsing/amusing_git.git'
|
15
|
+
|
16
|
+
s.files = `git ls-files -z`.split("\x0")
|
17
|
+
s.executables = s.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'thor', '~> 0.20.0'
|
22
|
+
s.add_development_dependency "bundler", "~> 1.5"
|
23
|
+
end
|
data/bin/amusing_git
ADDED
data/lib/amusing_git.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative './pretty_printer'
|
2
|
+
require_relative './git/git_repository'
|
3
|
+
|
4
|
+
module AmusingGit
|
5
|
+
class Amuser
|
6
|
+
include AmusingGit::PrettyPrinter
|
7
|
+
|
8
|
+
def amuse
|
9
|
+
begin
|
10
|
+
msgs = messages
|
11
|
+
print_info(msgs[rand(0..msgs.size-1)] + "\n")
|
12
|
+
rescue
|
13
|
+
print_error "Error reading amusing git config file\n"
|
14
|
+
return
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def start_amusing(dir)
|
19
|
+
unless AmusingGit::GitRepository.git_repo? dir
|
20
|
+
print_error "#{dir} is not a git repository, halting...\n"
|
21
|
+
return
|
22
|
+
end
|
23
|
+
|
24
|
+
git_repository = AmusingGit::GitRepository.new dir
|
25
|
+
git_repository.create_hooks! unless git_repository.has_hooks?
|
26
|
+
git_repository.configure_amusing_git!
|
27
|
+
|
28
|
+
print_success "Done :)\n"
|
29
|
+
end
|
30
|
+
|
31
|
+
def stop_amusing(dir)
|
32
|
+
unless AmusingGit::GitRepository.git_repo? dir
|
33
|
+
print_error "#{dir} is not a git repository, halting...\n"
|
34
|
+
return
|
35
|
+
end
|
36
|
+
|
37
|
+
git_repository = AmusingGit::GitRepository.new dir
|
38
|
+
return unless git_repository.has_hooks?
|
39
|
+
git_repository.remove_amusing_git!
|
40
|
+
|
41
|
+
print_success "Done :)\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def messages
|
46
|
+
File.read(config["messages"]).split("\n")
|
47
|
+
end
|
48
|
+
|
49
|
+
def config
|
50
|
+
JSON.parse(File.read("#{ENV["HOME"]}/.amusing_git/config"))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require_relative './setup'
|
3
|
+
require_relative './amuser'
|
4
|
+
|
5
|
+
module AmusingGit
|
6
|
+
class CLI < Thor
|
7
|
+
include AmusingGit::PrettyPrinter
|
8
|
+
|
9
|
+
desc "start", "Start amusing for the current git repository"
|
10
|
+
def start
|
11
|
+
maybe_setup_amusing_git
|
12
|
+
amuser.start_amusing Dir.pwd
|
13
|
+
end
|
14
|
+
|
15
|
+
desc "stop", "Stop amusing for the current git repository"
|
16
|
+
def stop
|
17
|
+
maybe_setup_amusing_git
|
18
|
+
amuser.stop_amusing Dir.pwd
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "amuse", "Print random messsage from configured messages"
|
22
|
+
def amuse
|
23
|
+
maybe_setup_amusing_git
|
24
|
+
amuser.amuse
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "setup", "Setup amusing git"
|
28
|
+
def setup
|
29
|
+
amusing_git_setup.start
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
def maybe_setup_amusing_git
|
34
|
+
amusing_git_setup.start unless amusing_git_setup.setup_exists?
|
35
|
+
end
|
36
|
+
|
37
|
+
def amuser
|
38
|
+
@amuser ||= AmusingGit::Amuser.new
|
39
|
+
end
|
40
|
+
|
41
|
+
def amusing_git_setup
|
42
|
+
@amusing_git_setup ||= AmusingGit::Setup.new
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module AmusingGit
|
2
|
+
class GitHook
|
3
|
+
def initialize(hook_file)
|
4
|
+
@hook_file = hook_file
|
5
|
+
end
|
6
|
+
|
7
|
+
def exists?
|
8
|
+
File.file? @hook_file
|
9
|
+
end
|
10
|
+
|
11
|
+
def create!
|
12
|
+
`touch #{@hook_file}`
|
13
|
+
`chmod +x #{@hook_file}`
|
14
|
+
end
|
15
|
+
|
16
|
+
def configure_amusing_git!
|
17
|
+
`echo "amusing_git amuse" >> #{@hook_file}`
|
18
|
+
end
|
19
|
+
|
20
|
+
def remove_amusing_git!
|
21
|
+
content = File.read(@hook_file)
|
22
|
+
new_content = content.gsub('amusing_git amuse', '')
|
23
|
+
File.open(@hook_file, 'w').write(new_content)
|
24
|
+
end
|
25
|
+
|
26
|
+
def amusing?
|
27
|
+
File.read(@hook_file).include? 'amusing_git amuse'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative './git_hook'
|
2
|
+
|
3
|
+
module AmusingGit
|
4
|
+
class GitRepository
|
5
|
+
def initialize(dir)
|
6
|
+
@dir = dir
|
7
|
+
end
|
8
|
+
|
9
|
+
def has_hooks?
|
10
|
+
File.exists? "#{@dir}/.git/hooks"
|
11
|
+
end
|
12
|
+
|
13
|
+
def create_hooks!
|
14
|
+
`mkdir -p .git/hooks`
|
15
|
+
end
|
16
|
+
|
17
|
+
def configure_amusing_git!
|
18
|
+
hooks.each do |hook|
|
19
|
+
hook.create! unless hook.exists?
|
20
|
+
hook.configure_amusing_git! unless hook.amusing?
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def remove_amusing_git!
|
25
|
+
hooks.each do |hook|
|
26
|
+
hook.remove_amusing_git! if hook.amusing?
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.git_repo? dir
|
31
|
+
File.exists? "#{dir}/.git"
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def hooks
|
36
|
+
["#{@dir}/.git/hooks/pre-push", "#{@dir}/.git/hooks/pre-rebase"].map { |h| AmusingGit::GitHook.new h}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module AmusingGit
|
2
|
+
class MessageSeeder
|
3
|
+
def self.seed
|
4
|
+
<<-MESSAGES
|
5
|
+
Why does the computer programmer ignore the warning on the cigarette carton? Because he's seen so many warnings he only cares about errors.
|
6
|
+
What does the computer programmer say to his fellow programmer when he asks him to borrow $1000? I'll give you 1024 to make it even.
|
7
|
+
How does a network administrator nerd greet people who come to his house? Welcome to 127.0.0.1.
|
8
|
+
Beware of computer programmers that carry screwdrivers :P
|
9
|
+
If at first you don't succeed; call it version 1.0
|
10
|
+
If Python is executable pseudocode, then perl is executable line noise.
|
11
|
+
Programmers are tools for converting caffeine into code.
|
12
|
+
Hey! It compiles! Ship it!
|
13
|
+
SUPERCOMPUTER: what it sounded like before you bought it.
|
14
|
+
Windows Vista: It's like upgrading from Bill Clinton to George W. Bush.
|
15
|
+
My software never has bugs. It just develops random features.
|
16
|
+
The only problem with troubleshooting is that sometimes trouble shoots back.
|
17
|
+
Relax, its only ONES and ZEROS !
|
18
|
+
rm -rf /bin/laden
|
19
|
+
The great thing about Object Oriented code is that it can make small, simple problems look like large, complex ones.
|
20
|
+
If brute force doesn't solve your problems, then you aren't using enough.
|
21
|
+
Unix is user-friendly. It's just very selective about who its friends are.
|
22
|
+
I'm not anti-social; I'm just not user friendly
|
23
|
+
The world is coming to an end... SAVE YOUR BUFFERS !
|
24
|
+
If you don't want to be replaced by a computer, don't act like one.
|
25
|
+
There are 10 types of people in the world: those who understand binary, and those who don't.
|
26
|
+
Difference between a virus and windows ? Viruses rarely fail.
|
27
|
+
I think Microsoft named .Net so it wouldn’t show up in a Unix directory listing
|
28
|
+
If debugging is the process of removing bugs, then programming must be the process of putting them in.
|
29
|
+
Any fool can use a computer. Many do.
|
30
|
+
Hardware: The parts of a computer system that can be kicked.
|
31
|
+
They don't make bugs like Bunny anymore
|
32
|
+
When someone says: 'I want a programming language in which I need only say what I wish done', give him a lollipop.
|
33
|
+
Good design adds value faster than it adds cost.
|
34
|
+
Python's a drop-in replacement for BASIC in the sense that Optimus Prime is a drop-in replacement for a truck.
|
35
|
+
Talk is cheap. Show me the code.
|
36
|
+
Perl – The only language that looks the same before and after RSA encryption
|
37
|
+
Beware of bugs in the above code; I have only proved it correct, not tried it.
|
38
|
+
I don't care if it works on your machine! We are not shipping your machine!
|
39
|
+
Sometimes it pays to stay in bed on Monday, rather than spending the rest of the week debugging Monday's code.
|
40
|
+
Measuring programming progress by lines of code is like measuring aircraft building progress by weight.
|
41
|
+
MESSAGES
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module AmusingGit
|
2
|
+
module PrettyPrinter
|
3
|
+
def colorize(text, color_code)
|
4
|
+
"#{color_code}#{text}\e[0m"
|
5
|
+
end
|
6
|
+
|
7
|
+
def red(text); colorize(text, "\e[31m"); end
|
8
|
+
def green(text); colorize(text, "\e[32m"); end
|
9
|
+
def yellow(text); colorize(text, "\e[1m\e[33m"); end
|
10
|
+
|
11
|
+
def print_info(msg)
|
12
|
+
STDOUT.write yellow(msg)
|
13
|
+
end
|
14
|
+
|
15
|
+
def print_error(msg)
|
16
|
+
STDOUT.write red(msg)
|
17
|
+
end
|
18
|
+
|
19
|
+
def print_success(msg)
|
20
|
+
STDOUT.write green(msg)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'json'
|
2
|
+
require_relative './pretty_printer'
|
3
|
+
require_relative './message_seeder'
|
4
|
+
|
5
|
+
module AmusingGit
|
6
|
+
class Setup
|
7
|
+
include AmusingGit::PrettyPrinter
|
8
|
+
|
9
|
+
def start
|
10
|
+
if setup_exists?
|
11
|
+
print_info "You already have amusing git setup, skipping...\n"
|
12
|
+
return
|
13
|
+
end
|
14
|
+
|
15
|
+
print_info "Setting up amusing git configuration...\n"
|
16
|
+
create_amusing_git_dir
|
17
|
+
write_config
|
18
|
+
copy_messages
|
19
|
+
print_success "Setup is completed!\n"
|
20
|
+
end
|
21
|
+
|
22
|
+
def setup_exists?
|
23
|
+
File.exists? "#{ENV['HOME']}/.amusing_git"
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def create_amusing_git_dir
|
28
|
+
`mkdir #{ENV['HOME']}/.amusing_git`
|
29
|
+
end
|
30
|
+
|
31
|
+
def write_config
|
32
|
+
File.open(config_file, "w") do |f|
|
33
|
+
f.write(JSON.pretty_generate(config))
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def copy_messages
|
38
|
+
File.open("#{ENV['HOME']}/.amusing_git/default_messages", 'w').write(AmusingGit::MessageSeeder.seed)
|
39
|
+
end
|
40
|
+
|
41
|
+
def config_file
|
42
|
+
File.new("#{ENV['HOME']}/.amusing_git/config", "w")
|
43
|
+
end
|
44
|
+
|
45
|
+
def config
|
46
|
+
{
|
47
|
+
"messages" => "#{ENV['HOME']}/.amusing_git/default_messages"
|
48
|
+
}
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: amusing_git
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ajit Singh
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.20.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.20.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.5'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.5'
|
41
|
+
description: Brings fun to the git workflow!
|
42
|
+
email: jeetsingh.ajit@gamil.com
|
43
|
+
executables:
|
44
|
+
- amusing_git
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- Gemfile
|
49
|
+
- Gemfile.lock
|
50
|
+
- amusing_git.gemspec
|
51
|
+
- bin/amusing_git
|
52
|
+
- lib/amusing_git.rb
|
53
|
+
- lib/amusing_git/amuser.rb
|
54
|
+
- lib/amusing_git/cli.rb
|
55
|
+
- lib/amusing_git/git/git_hook.rb
|
56
|
+
- lib/amusing_git/git/git_repository.rb
|
57
|
+
- lib/amusing_git/message_seeder.rb
|
58
|
+
- lib/amusing_git/pretty_printer.rb
|
59
|
+
- lib/amusing_git/setup.rb
|
60
|
+
- lib/amusing_git/version.rb
|
61
|
+
homepage: https://github.com/ajitsing/amusing_git.git
|
62
|
+
licenses:
|
63
|
+
- MIT
|
64
|
+
metadata: {}
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
requirements: []
|
80
|
+
rubyforge_project:
|
81
|
+
rubygems_version: 2.6.13
|
82
|
+
signing_key:
|
83
|
+
specification_version: 4
|
84
|
+
summary: Brings fun to the git workflow!
|
85
|
+
test_files: []
|