2010-06-11 5 views
0

Je n'arrive pas à trouver les fichiers modifiés entre deux validations différentes. Voici la configuration, la version de Ruby et Gem Grit, et ce qui se passe quand je lance le programme:Comment savoir quels fichiers ont été modifiés entre les validations à l'aide de Grit

> cd /temp 
> mkdir tt 
> cd tt 
> git init 
Initialized empty Git repository in C:/temp/tt/.git/ 
> ruby --version 
ruby 1.8.7 (2010-01-10 patchlevel 249) [i386-mingw32] 
> gem list grit 
*** LOCAL GEMS *** 
grit (2.0.0) 
> ruby ..\git_diff_test.rb 
Commit #1 succeeded. 
Commit #2 succeeded. 
c:/apps/ruby/lib/ruby/gems/1.8/gems/grit-2.0.0/lib/grit/repo.rb:290:in `diff': wrong number of arguments (4 for 3) (ArgumentError) 
     from c:/apps/ruby/lib/ruby/gems/1.8/gems/grit-2.0.0/lib/grit/repo.rb:290:in `diff' 
     from ../git_diff_test.rb:13 

Voici le programme de rubis:

require 'rubygems' 
require 'grit' 
include Grit 
File.open('t1.txt', 'w') { |f| f.write('hi/bye') } 
repo = Repo.new('.') 
repo.add('.') 
puts "Commit #1 #{repo.commit_all('1') ? 'succeeded' : 'failed'}." 
File.open('t1.txt', 'w') { |f| f.write('hi/bye twice') } 
File.open('t2.txt', 'w') { |f| f.write('hi/bye 2') } 
repo.add('.') 
puts "Commit #2 #{repo.commit_all('2') ? 'succeeded' : 'failed'}." 
commits = repo.commits 
the_diff = repo.diff(commits[0], commits[1]) # line 13 with the error 
p the_diff 
+0

En utilisant les outils de ligne de commande, ce serait 'git diff --numstat commit1..commit2', mais je ne sais pas comment emula te que dans Grit. – Novelocrat

+0

Merci pour le pointeur. L'appel qui échoue échoue en appelant un appel de niveau inférieur qui exécute et appelle la ligne de commande git diff. L'appel de cette fonction de niveau inférieur produit un diff, le problème est que la définition des options de ligne cmd est supprimée. Il y a un autre problème, à moins que le répertoire courant du programme ruby ​​soit dans l'arbre de travail, il peut trouver le répertoire .git, donc l'appel exec échoue - la commande .add souffre également de ce problème. Comme il s'agit d'une application threadée, changer le pwd ne fonctionnera pas - je dois donc écrire des scripts shell qui font le travail, plutôt que d'utiliser la bibliothèque Grit. –

Répondre

0

vous pouvez utiliser

grit.commits_between('HASH1', 'HASH2') 

pour obtenir la liste des deux commit

Questions connexes