lib/gistory/change_log.rb in gistory-0.1.5 vs lib/gistory/change_log.rb in gistory-0.1.6
- old
+ new
@@ -10,25 +10,35 @@
@repo = repo
end
def changelog_for_gem(gem_name)
version_changes = []
- previous_version = nil
lockfile_changes = @repo.changes_to_file(LOCKFILE)
- lockfile_changes.each do |commit|
- gem_spec = gem_spec_at_commit_hash(commit.short_hash, gem_name)
+ # no lockfile found or no changes to the lockfile found
+ return [] if lockfile_changes.empty?
+ previous_commit = lockfile_changes.shift
+ previous_gem_spec = gem_spec_at_commit_hash(previous_commit.short_hash, gem_name)
+ # only one change to the lockfile was found and the gem was not there
+ return [] if previous_gem_spec.nil?
+
+ lockfile_changes.each do |current_commit|
+ current_gem_spec = gem_spec_at_commit_hash(current_commit.short_hash, gem_name)
+
# we reached the end, the gem didn't exist back then
# TODO: what if it was added then removed and then added again?
- break if gem_spec.nil?
+ break if current_gem_spec.nil?
- # only store version changes of this gem
- unless gem_spec.version.to_s == previous_version
- version_changes << VersionChange.new(commit: commit, version: gem_spec.version)
- previous_version = gem_spec.version.to_s
+ if current_gem_spec.version.to_s != previous_gem_spec.version.to_s
+ version_changes << VersionChange.new(commit: previous_commit, version: previous_gem_spec.version)
end
+
+ previous_gem_spec = current_gem_spec
+ previous_commit = current_commit
end
+
+ version_changes << VersionChange.new(commit: previous_commit, version: previous_gem_spec.version)
version_changes
end
private