Module: GitCrecord::Git
- Defined in:
- lib/git_crecord/git.rb
Class Method Summary collapse
- ._stage(diff, reverse = false) ⇒ Object
- .add_file(filename) ⇒ Object
- .add_files(files) ⇒ Object
- .commit ⇒ Object
- .diff(staged: false) ⇒ Object
- .reset_file(filename) ⇒ Object
- .reset_files(files) ⇒ Object
- .stage(files, reverse = false) ⇒ Object
- .status ⇒ Object
- .tab ⇒ Object
- .toplevel_dir ⇒ Object
Class Method Details
._stage(diff, reverse = false) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/git_crecord/git.rb', line 20 def self._stage(diff, reverse = false) cmd = "git apply --cached --unidiff-zero #{reverse ? '-R' : ''} - " content, status = Open3.capture2e(cmd, stdin_data: diff) LOGGER.info(cmd) LOGGER.info(diff) LOGGER.info(diff.lines.size) LOGGER.info('stdout/stderr:') LOGGER.info(content) LOGGER.info("return code: #{status}") status end |
.add_file(filename) ⇒ Object
39 40 41 |
# File 'lib/git_crecord/git.rb', line 39 def self.add_file(filename) system("git add -N #{filename}") end |
.add_files(files) ⇒ Object
32 33 34 35 36 37 |
# File 'lib/git_crecord/git.rb', line 32 def self.add_files(files) files.each do |file| success = add_file(file.filename_a) raise "could not add file #{file.filename_a}" unless success end end |
.commit ⇒ Object
58 59 60 |
# File 'lib/git_crecord/git.rb', line 58 def self.commit exec('git commit') end |
.diff(staged: false) ⇒ Object
62 63 64 |
# File 'lib/git_crecord/git.rb', line 62 def self.diff(staged: false) `git diff --no-ext-diff --no-color #{staged ? '--staged' : ''}` end |
.reset_file(filename) ⇒ Object
50 51 52 |
# File 'lib/git_crecord/git.rb', line 50 def self.reset_file(filename) system("git reset -q #{filename}") end |
.reset_files(files) ⇒ Object
43 44 45 46 47 48 |
# File 'lib/git_crecord/git.rb', line 43 def self.reset_files(files) files.each do |file| success = reset_file(file.filename_a) raise "could not reset file #{file.filename_a}" unless success end end |
.stage(files, reverse = false) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/git_crecord/git.rb', line 8 def self.stage(files, reverse = false) selected_files = files.select(&:selected) untracked_files = selected_files.select { |file| file.type == :untracked } add_files(untracked_files) unless reverse diff = selected_files.map(&:generate_diff).join("\n") status = _stage(diff, reverse).success? return status unless reverse reset_files(untracked_files.select { |file| file.selected == true }) true end |
.status ⇒ Object
54 55 56 |
# File 'lib/git_crecord/git.rb', line 54 def self.status `git status --porcelain` end |
.tab ⇒ Object
70 71 72 |
# File 'lib/git_crecord/git.rb', line 70 def self.tab @tab ||= ' ' * [2, `git config crecord.tabwidth`.to_i].max end |
.toplevel_dir ⇒ Object
66 67 68 |
# File 'lib/git_crecord/git.rb', line 66 def self.toplevel_dir `git rev-parse --show-toplevel`.chomp end |