0

Grit::Commit新しい2 つのオブジェクトを区別できるようにしたいと考えています。私がより新しいとは、commit_Aが の親 (または親の親など) であるcommit_B場合、commit_Bより新しいということです。commit_Aこれは、とcommit_Bが同じブランチにあることを前提としています。

Grit::Commit#date()使おうと思ったのですが、これは不正確だと思います。

何か案は?

4

2 に答える 2

1

これが私が最終的に実装したものです。説明についてはコメントを参照してください。

パフォーマンスは非常に遅いですが、repo.git.rev_list (method_missing 経由) を使用するとさらに悪化しました。

require 'grit'

module Grit

    class Commit

        # Returns true if any commits in +commits+ are decendants of calling commit. True
        # means that one or more commits in +commits+ are newer.
        def has_decendant_in? *commits 
            total_commits = commits.flatten
            raise ArgumentError "at least one commit required." if total_commits.empty?
            total_commits.each do |commit|
                return true if repo.commits_between(commit.id, id).empty?
            end
            return false
        end

        # Returns an Array of commits which tie for being the newest commits. Ties can
        # occur when commits are in different branches.
        def self.newest *commits
            oldest_commits = []
            total_commits = commits.flatten
            raise ArgumentError "at least one commit required." if total_commits.empty?
            (total_commits).each do |commit|
                if commit.has_decendant_in?(total_commits - [commit])
                    oldest_commits << commit 
                end
            end
            return total_commits - oldest_commits
        end

    end

end
于 2012-06-13T22:18:46.223 に答える
0

以下が役に立ちます... git log --graph または gitk を使用できます

于 2012-06-05T07:21:35.837 に答える