git-pivotal 0.2.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. data/.gitignore +2 -0
  2. data/CHANGELOG +9 -1
  3. data/Rakefile +23 -10
  4. data/VERSION +1 -1
  5. data/bin/git-bug +0 -1
  6. data/bin/git-chore +0 -1
  7. data/bin/git-feature +0 -1
  8. data/bin/git-finish +0 -1
  9. data/bin/git-info +7 -0
  10. data/bin/git-pick +0 -1
  11. data/features/bug.feature +9 -0
  12. data/features/chore.feature +22 -0
  13. data/features/feature.feature +37 -0
  14. data/features/finish.feature +79 -0
  15. data/features/info.feature +39 -0
  16. data/features/step_definitions/steps.rb +18 -0
  17. data/features/support/env.rb +5 -0
  18. data/features/support/git-pivotal.rb +47 -0
  19. data/features/test_repo/readme +1 -0
  20. data/features/test_repo/working.git/COMMIT_EDITMSG +1 -0
  21. data/features/test_repo/working.git/HEAD +1 -0
  22. data/features/test_repo/working.git/config +8 -0
  23. data/features/test_repo/working.git/description +1 -0
  24. data/features/test_repo/working.git/hooks/applypatch-msg.sample +15 -0
  25. data/features/test_repo/working.git/hooks/commit-msg.sample +24 -0
  26. data/features/test_repo/working.git/hooks/post-commit.sample +8 -0
  27. data/features/test_repo/working.git/hooks/post-receive.sample +15 -0
  28. data/features/test_repo/working.git/hooks/post-update.sample +8 -0
  29. data/features/test_repo/working.git/hooks/pre-applypatch.sample +14 -0
  30. data/features/test_repo/working.git/hooks/pre-commit.sample +46 -0
  31. data/features/test_repo/working.git/hooks/pre-rebase.sample +169 -0
  32. data/features/test_repo/working.git/hooks/prepare-commit-msg.sample +36 -0
  33. data/features/test_repo/working.git/hooks/update.sample +128 -0
  34. data/features/test_repo/working.git/index +0 -0
  35. data/features/test_repo/working.git/info/exclude +6 -0
  36. data/features/test_repo/working.git/logs/HEAD +1 -0
  37. data/features/test_repo/working.git/logs/refs/heads/master +1 -0
  38. data/features/test_repo/working.git/objects/0c/6f7b1384910d1a2f137590095f008a06c7e00c +0 -0
  39. data/features/test_repo/working.git/objects/10/ecf2b7ce989f01f3f7266e712b48d9275f2635 +0 -0
  40. data/features/test_repo/working.git/objects/a5/71d56305df09fb060f6ccb730b46080d305beb +0 -0
  41. data/features/test_repo/working.git/refs/heads/master +1 -0
  42. data/git-pivotal.gemspec +49 -38
  43. data/lib/commands/base.rb +19 -9
  44. data/lib/commands/finish.rb +12 -9
  45. data/lib/commands/info.rb +31 -0
  46. data/lib/commands/pick.rb +26 -22
  47. data/lib/git-pivotal.rb +9 -0
  48. data/readme.markdown +13 -0
  49. data/spec/commands/base_spec.rb +20 -1
  50. data/spec/commands/bug_spec.rb +0 -1
  51. data/spec/commands/chore_spec.rb +0 -1
  52. data/spec/commands/feature_spec.rb +0 -1
  53. data/spec/commands/finish_spec.rb +1 -2
  54. data/spec/spec_helper.rb +4 -8
  55. metadata +61 -52
  56. data/lib/pivotal/api.rb +0 -17
  57. data/lib/pivotal/associations.rb +0 -17
  58. data/lib/pivotal/attributes.rb +0 -25
  59. data/lib/pivotal/base.rb +0 -73
  60. data/lib/pivotal/collection.rb +0 -63
  61. data/lib/pivotal/project.rb +0 -14
  62. data/lib/pivotal/story.rb +0 -44
  63. data/lib/pivotal.rb +0 -8
  64. data/spec/pivotal/api_spec.rb +0 -18
  65. data/spec/pivotal/associations_spec.rb +0 -13
  66. data/spec/pivotal/attributes_spec.rb +0 -31
  67. data/spec/pivotal/base_spec.rb +0 -77
  68. data/spec/pivotal/collection_spec.rb +0 -25
  69. data/spec/pivotal/project_spec.rb +0 -34
  70. data/spec/pivotal/story_spec.rb +0 -113
  71. data/spec/spec.opts +0 -1
data/.gitignore CHANGED
@@ -2,3 +2,5 @@ pkg
2
2
  coverage
3
3
  *.gem
4
4
  *.swp
5
+ tmp
6
+ Gemfile.lock
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ v 0.8.0
2
+ - Drop home-rolled PivotalTracker API for pivotal-tracker gem
3
+ - Add Gemfile for easier development
4
+ - Add better test suite with Cucumber and Aruba
5
+ - Add option for appending the branch name (rather than prepending) [Addy
6
+ Naik]
7
+ - Add new `git info` command [Addy Naik]
8
+
1
9
  v 0.2.3
2
10
  - Allow the developer to specify the integration branch for git finish [Graeme Mathieson]
3
11
  - Fixed bug which prevented chores from finishing successfully [Joshua Vial]
@@ -29,4 +37,4 @@ v 0.1.1
29
37
  v 0.1.0
30
38
  - Initial release
31
39
  - Basic framework for reading from Pivotal Tracker
32
- - git pick utility
40
+ - git pick utility
data/Rakefile CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
- require 'spec/rake/spectask'
4
3
 
5
4
  $LOAD_PATH.unshift('lib')
6
5
 
@@ -14,13 +13,13 @@ begin
14
13
  gemspec.homepage = "http://github.com/trydionel/git-pivotal"
15
14
  gemspec.authors = ["Jeff Tucker", "Sam Stokes"]
16
15
 
17
- gemspec.add_dependency "nokogiri"
18
- gemspec.add_dependency "rest-client", "~>1.4.0"
19
16
  gemspec.add_dependency "builder"
17
+ gemspec.add_dependency "pivotal-tracker", "~>0.3.1"
20
18
 
21
- gemspec.add_development_dependency "rspec"
19
+ gemspec.add_development_dependency "rspec", "~>2.5.0"
22
20
  gemspec.add_development_dependency "rcov"
23
- gemspec.add_development_dependency "mocha"
21
+ gemspec.add_development_dependency "cucumber", "~>0.9.2"
22
+ gemspec.add_development_dependency "aruba", "~>0.2.3"
24
23
  end
25
24
 
26
25
  Jeweler::GemcutterTasks.new
@@ -28,8 +27,22 @@ rescue
28
27
  puts "Jeweler not available. Install it with: gem install jeweler"
29
28
  end
30
29
 
31
- Spec::Rake::SpecTask.new do |t|
32
- t.spec_opts = ['--color']
33
- t.rcov = true
34
- t.rcov_opts = ['--exclude', 'gems']
35
- end
30
+ begin
31
+ require 'rspec/core/rake_task'
32
+ RSpec::Core::RakeTask.new do |t|
33
+ t.rspec_opts = ['--color']
34
+ t.rcov = true
35
+ t.rcov_opts = ['--exclude', 'gems']
36
+ end
37
+ rescue LoadError => e
38
+ puts "RSpec not installed"
39
+ end
40
+
41
+ begin
42
+ require 'cucumber/rake/task'
43
+ Cucumber::Rake::Task.new(:features) do |t|
44
+ t.cucumber_opts = "features --format pretty"
45
+ end
46
+ rescue LoadError => e
47
+ puts "Cucumber not installed"
48
+ end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.8.0
data/bin/git-bug CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
4
 
5
- require 'pivotal'
6
5
  require 'commands/bug'
7
6
 
8
7
  exit Commands::Bug.new(STDIN, STDOUT, *ARGV).run!
data/bin/git-chore CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
4
 
5
- require 'pivotal'
6
5
  require 'commands/chore'
7
6
 
8
7
  exit Commands::Chore.new(STDIN, STDOUT, *ARGV).run!
data/bin/git-feature CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
4
 
5
- require 'pivotal'
6
5
  require 'commands/feature'
7
6
 
8
7
  exit Commands::Feature.new(STDIN, STDOUT, *ARGV).run!
data/bin/git-finish CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
4
 
5
- require 'pivotal'
6
5
  require 'commands/finish'
7
6
 
8
7
  exit Commands::Finish.new(STDIN, STDOUT, *ARGV).run!
data/bin/git-info ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
+
5
+ require 'commands/info'
6
+
7
+ exit Commands::Info.new(STDIN, STDOUT, *ARGV).run!
data/bin/git-pick CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
4
 
5
- require 'pivotal'
6
5
  require 'commands/feature'
7
6
 
8
7
  STDOUT.puts "DEPRECATION WARNING: git pick has been deprecated. Please use git feature instead."
@@ -0,0 +1,9 @@
1
+ Feature: git bug
2
+
3
+ Background:
4
+ Given I have a Pivotal Tracker bug
5
+
6
+ Scenario: Verifying created branch
7
+ When I run "git-bug -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815 -D"
8
+ Then the output should contain "Switched to a new branch '5799841-bugfix'"
9
+ And I should be on the "5799841-bugfix" branch
@@ -0,0 +1,22 @@
1
+ Feature: git chore
2
+
3
+ Background:
4
+ Given I have a Pivotal Tracker chore
5
+
6
+ Scenario: Executing with inline options
7
+ When I run "git-chore -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815 -D"
8
+ Then the output should contain "Switched to a new branch '5799841-chore'"
9
+ And I should be on the "5799841-chore" branch
10
+
11
+ Scenario: Executing with git configuration
12
+ Given a file named ".gitconfig" with:
13
+ """
14
+ [pivotal]
15
+ api-token = 10bfe281783e2bdc2d6592c0ea21e8d5
16
+ full-name = Jeff Tucker
17
+ integration-branch = develop
18
+ project-id = 52815
19
+ """
20
+ When I run "git-chore -D"
21
+ Then the output should contain "Switched to a new branch '5799841-chore'"
22
+ And I should be on the "5799841-chore" branch
@@ -0,0 +1,37 @@
1
+ Feature: git feature
2
+
3
+ Background:
4
+ Given I have a Pivotal Tracker feature
5
+
6
+ Scenario: Executing with no settings
7
+ When I run "git-feature"
8
+ Then the output should contain:
9
+ """
10
+ Pivotal Tracker API Token and Project ID are required
11
+ """
12
+ And the exit status should be 1
13
+
14
+ Scenario: Executing with inline options
15
+ When I run "git-feature -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815 -D"
16
+ Then the output should contain:
17
+ """
18
+ Retrieving latest features from Pivotal Tracker...
19
+ Story: Test Story
20
+ URL: http://www.pivotaltracker.com/story/show/5799841
21
+ Updating feature status in Pivotal Tracker...
22
+ Switched to a new branch '5799841-feature'
23
+ """
24
+ And I should be on the "5799841-feature" branch
25
+
26
+ Scenario: Executing with git configuration
27
+ Given a file named ".gitconfig" with:
28
+ """
29
+ [pivotal]
30
+ api-token = 10bfe281783e2bdc2d6592c0ea21e8d5
31
+ full-name = Jeff Tucker
32
+ integration-branch = develop
33
+ project-id = 52815
34
+ """
35
+ When I run "git-feature -D"
36
+ Then the output should contain "Switched to a new branch '5799841-feature'"
37
+ And I should be on the "5799841-feature" branch
@@ -0,0 +1,79 @@
1
+ Feature: git finish
2
+
3
+ Background:
4
+ Given I have a started Pivotal Tracker feature
5
+ And I am on the "5799841-feature" branch
6
+
7
+ Scenario: Executing with no settings
8
+ When I run "git-finish"
9
+ Then the output should contain:
10
+ """
11
+ Pivotal Tracker API Token and Project ID are required
12
+ """
13
+ And the exit status should be 1
14
+
15
+ Scenario: Excuting with inline settings
16
+ When I run "git-finish -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815"
17
+ Then the output should contain:
18
+ """
19
+ Marking Story 5799841 as finished...
20
+ Merging 5799841-feature into master
21
+ Removing 5799841-feature branch
22
+ """
23
+ And I should be on the "master" branch
24
+
25
+ Scenario: Executing with git configuration
26
+ Given a file named ".gitconfig" with:
27
+ """
28
+ [pivotal]
29
+ api-token = 10bfe281783e2bdc2d6592c0ea21e8d5
30
+ full-name = Jeff Tucker
31
+ project-id = 52815
32
+ """
33
+ When I run "git-finish -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815"
34
+ Then the output should contain:
35
+ """
36
+ Marking Story 5799841 as finished...
37
+ Merging 5799841-feature into master
38
+ Removing 5799841-feature branch
39
+ """
40
+ And I should be on the "master" branch
41
+
42
+ Scenario: Specifying an integration branch
43
+ Given I have a "develop" branch
44
+ And a file named ".gitconfig" with:
45
+ """
46
+ [pivotal]
47
+ api-token = 10bfe281783e2bdc2d6592c0ea21e8d5
48
+ full-name = Jeff Tucker
49
+ integration-branch = develop
50
+ project-id = 52815
51
+ """
52
+ When I run "git-finish -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815"
53
+ Then the output should contain:
54
+ """
55
+ Marking Story 5799841 as finished...
56
+ Merging 5799841-feature into develop
57
+ Removing 5799841-feature branch
58
+ """
59
+ And I should be on the "develop" branch
60
+
61
+ Scenario: Closing chore stories
62
+ Given I have a started Pivotal Tracker chore
63
+ And I am on the "5799841-chore" branch
64
+ And a file named ".gitconfig" with:
65
+ """
66
+ [pivotal]
67
+ api-token = 10bfe281783e2bdc2d6592c0ea21e8d5
68
+ full-name = Jeff Tucker
69
+ project-id = 52815
70
+ """
71
+ When I run "git-finish -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815"
72
+ Then the output should contain:
73
+ """
74
+ Marking Story 5799841 as finished...
75
+ Merging 5799841-chore into master
76
+ Removing 5799841-chore branch
77
+ """
78
+ And I should be on the "master" branch
79
+
@@ -0,0 +1,39 @@
1
+ Feature: git info
2
+
3
+ Background:
4
+ Given I have a Pivotal Tracker feature
5
+ And I am on the "5799841-feature" branch
6
+
7
+ Scenario: Executing with no settings
8
+ When I run "git-info"
9
+ Then the output should contain:
10
+ """
11
+ Pivotal Tracker API Token and Project ID are required
12
+ """
13
+ And the exit status should be 1
14
+
15
+ Scenario: Executing with inline options
16
+ When I run "git-info -k 10bfe281783e2bdc2d6592c0ea21e8d5 -p 52815 -D"
17
+ Then the output should contain:
18
+ """
19
+ Story: Test Story
20
+ URL: http://www.pivotaltracker.com/story/show/5799841
21
+ Description: This is the description!
22
+ """
23
+
24
+ Scenario: Executing with git configuration
25
+ Given a file named ".gitconfig" with:
26
+ """
27
+ [pivotal]
28
+ api-token = 10bfe281783e2bdc2d6592c0ea21e8d5
29
+ full-name = Jeff Tucker
30
+ integration-branch = develop
31
+ project-id = 52815
32
+ """
33
+ When I run "git-info"
34
+ Then the output should contain:
35
+ """
36
+ Story: Test Story
37
+ URL: http://www.pivotaltracker.com/story/show/5799841
38
+ Description: This is the description!
39
+ """
@@ -0,0 +1,18 @@
1
+ STORY_TYPE = /feature|bug|chore|release/
2
+ STORY_STATE = /unscheduled|unstarted|started|finished|delivered|accepted|rejected/
3
+
4
+ Given /^I have a(?:n)? (#{STORY_STATE})?\s?Pivotal Tracker (#{STORY_TYPE})$/ do |status, type|
5
+ update_test_story(type, status)
6
+ end
7
+
8
+ Given /^I am on the "([^"]*)" branch$/ do |branch|
9
+ `git checkout -b #{branch} > /dev/null 2>&1`
10
+ end
11
+
12
+ Given /^I have a "([^"]*)" branch$/ do |branch|
13
+ `git branch #{branch} > /dev/null 2>&1`
14
+ end
15
+
16
+ Then /^I should be on the "([^"]*)" branch$/ do |branch|
17
+ current_branch.should == branch
18
+ end
@@ -0,0 +1,5 @@
1
+ $:.unshift('lib') unless $:.include?('lib')
2
+
3
+ require 'aruba'
4
+ require 'git-pivotal'
5
+ require 'pivotal-tracker'
@@ -0,0 +1,47 @@
1
+ require 'fileutils'
2
+
3
+ PIVOTAL_API_KEY = "10bfe281783e2bdc2d6592c0ea21e8d5"
4
+ PIVOTAL_TEST_PROJECT = 52815
5
+ PIVOTAL_TEST_ID = 5799841
6
+
7
+ Before do
8
+ build_temp_paths
9
+ set_env_variables
10
+ end
11
+
12
+ at_exit do
13
+ # The features seem to have trouble repeating accurately without
14
+ # setting the test story to an unstarted feature for the next run.
15
+ update_test_story("feature", "unstarted")
16
+ end
17
+
18
+ def build_temp_paths
19
+ _mkdir(current_dir)
20
+
21
+ test_repo = File.expand_path(File.join(File.dirname(__FILE__), '..', 'test_repo'))
22
+ FileUtils.cp_r(test_repo, current_dir)
23
+ Dir.chdir(File.join(current_dir, 'test_repo')) do
24
+ FileUtils.mv('working.git', '.git')
25
+ end
26
+ end
27
+
28
+ def set_env_variables
29
+ set_env "GIT_DIR", File.expand_path(File.join(current_dir, 'test_repo', '.git'))
30
+ set_env "GIT_WORK_TREE", File.expand_path(File.join(current_dir, 'test_repo'))
31
+ set_env "HOME", File.expand_path(current_dir)
32
+ end
33
+
34
+ def update_test_story(type, status = nil)
35
+ PivotalTracker::Client.token = PIVOTAL_API_KEY
36
+ project = PivotalTracker::Project.find(PIVOTAL_TEST_PROJECT)
37
+ story = project.stories.find(PIVOTAL_TEST_ID)
38
+
39
+ story.update(:story_type => type.to_s,
40
+ :current_state => status || "unstarted",
41
+ :estimate => (type.to_s == "feature" ? 1 : nil))
42
+ sleep(4) # let the data propagate
43
+ end
44
+
45
+ def current_branch
46
+ `git symbolic-ref HEAD`.chomp.split('/').last
47
+ end
@@ -0,0 +1 @@
1
+ Testing repo
@@ -0,0 +1 @@
1
+ A blank repo for testing
@@ -0,0 +1 @@
1
+ ref: refs/heads/master
@@ -0,0 +1,8 @@
1
+ [core]
2
+ repositoryformatversion = 0
3
+ filemode = true
4
+ bare = false
5
+ logallrefupdates = true
6
+ ignorecase = true
7
+ [pivotal]
8
+ project-id = 52815
@@ -0,0 +1 @@
1
+ Unnamed repository; edit this file 'description' to name the repository.
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to check the commit log message taken by
4
+ # applypatch from an e-mail message.
5
+ #
6
+ # The hook should exit with non-zero status after issuing an
7
+ # appropriate message if it wants to stop the commit. The hook is
8
+ # allowed to edit the commit message file.
9
+ #
10
+ # To enable this hook, rename this file to "applypatch-msg".
11
+
12
+ . git-sh-setup
13
+ test -x "$GIT_DIR/hooks/commit-msg" &&
14
+ exec "$GIT_DIR/hooks/commit-msg" ${1+"$@"}
15
+ :
@@ -0,0 +1,24 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to check the commit log message.
4
+ # Called by "git commit" with one argument, the name of the file
5
+ # that has the commit message. The hook should exit with non-zero
6
+ # status after issuing an appropriate message if it wants to stop the
7
+ # commit. The hook is allowed to edit the commit message file.
8
+ #
9
+ # To enable this hook, rename this file to "commit-msg".
10
+
11
+ # Uncomment the below to add a Signed-off-by line to the message.
12
+ # Doing this in a hook is a bad idea in general, but the prepare-commit-msg
13
+ # hook is more suited to it.
14
+ #
15
+ # SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p')
16
+ # grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1"
17
+
18
+ # This example catches duplicate Signed-off-by lines.
19
+
20
+ test "" = "$(grep '^Signed-off-by: ' "$1" |
21
+ sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || {
22
+ echo >&2 Duplicate Signed-off-by lines.
23
+ exit 1
24
+ }
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script that is called after a successful
4
+ # commit is made.
5
+ #
6
+ # To enable this hook, rename this file to "post-commit".
7
+
8
+ : Nothing
@@ -0,0 +1,15 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script for the "post-receive" event.
4
+ #
5
+ # The "post-receive" script is run after receive-pack has accepted a pack
6
+ # and the repository has been updated. It is passed arguments in through
7
+ # stdin in the form
8
+ # <oldrev> <newrev> <refname>
9
+ # For example:
10
+ # aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
11
+ #
12
+ # see contrib/hooks/ for a sample, or uncomment the next line and
13
+ # rename the file to "post-receive".
14
+
15
+ #. /usr/share/doc/git-core/contrib/hooks/post-receive-email
@@ -0,0 +1,8 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to prepare a packed repository for use over
4
+ # dumb transports.
5
+ #
6
+ # To enable this hook, rename this file to "post-update".
7
+
8
+ exec git update-server-info
@@ -0,0 +1,14 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to verify what is about to be committed
4
+ # by applypatch from an e-mail message.
5
+ #
6
+ # The hook should exit with non-zero status after issuing an
7
+ # appropriate message if it wants to stop the commit.
8
+ #
9
+ # To enable this hook, rename this file to "pre-applypatch".
10
+
11
+ . git-sh-setup
12
+ test -x "$GIT_DIR/hooks/pre-commit" &&
13
+ exec "$GIT_DIR/hooks/pre-commit" ${1+"$@"}
14
+ :
@@ -0,0 +1,46 @@
1
+ #!/bin/sh
2
+ #
3
+ # An example hook script to verify what is about to be committed.
4
+ # Called by "git commit" with no arguments. The hook should
5
+ # exit with non-zero status after issuing an appropriate message if
6
+ # it wants to stop the commit.
7
+ #
8
+ # To enable this hook, rename this file to "pre-commit".
9
+
10
+ if git rev-parse --verify HEAD >/dev/null 2>&1
11
+ then
12
+ against=HEAD
13
+ else
14
+ # Initial commit: diff against an empty tree object
15
+ against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
16
+ fi
17
+
18
+ # If you want to allow non-ascii filenames set this variable to true.
19
+ allownonascii=$(git config hooks.allownonascii)
20
+
21
+ # Cross platform projects tend to avoid non-ascii filenames; prevent
22
+ # them from being added to the repository. We exploit the fact that the
23
+ # printable range starts at the space character and ends with tilde.
24
+ if [ "$allownonascii" != "true" ] &&
25
+ # Note that the use of brackets around a tr range is ok here, (it's
26
+ # even required, for portability to Solaris 10's /usr/bin/tr), since
27
+ # the square bracket bytes happen to fall in the designated range.
28
+ test "$(git diff --cached --name-only --diff-filter=A -z $against |
29
+ LC_ALL=C tr -d '[ -~]\0')"
30
+ then
31
+ echo "Error: Attempt to add a non-ascii file name."
32
+ echo
33
+ echo "This can cause problems if you want to work"
34
+ echo "with people on other platforms."
35
+ echo
36
+ echo "To be portable it is advisable to rename the file ..."
37
+ echo
38
+ echo "If you know what you are doing you can disable this"
39
+ echo "check using:"
40
+ echo
41
+ echo " git config hooks.allownonascii true"
42
+ echo
43
+ exit 1
44
+ fi
45
+
46
+ exec git diff-index --check --cached $against --