OSDN Git Service

scm: mercurial: latest changesets support named branch (#7246).
authorToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Mon, 14 Mar 2011 13:41:01 +0000 (13:41 +0000)
committerToshi MARUYAMA <marutosijp2@yahoo.co.jp>
Mon, 14 Mar 2011 13:41:01 +0000 (13:41 +0000)
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@5127 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/models/repository/mercurial.rb

index 6ea61b0..a595e42 100644 (file)
@@ -94,8 +94,17 @@ class Repository::Mercurial < Repository
 
   def latest_changesets_cond(path, rev, limit)
     cond, args = [], []
-
-    if last = rev ? find_changeset_by_name(scm.tagmap[rev] || rev) : nil
+    if scm.branchmap.member? rev
+      # Mercurial named branch is *stable* in each revision.
+      # So, named branch can be stored in database.
+      # Mercurial provides *bookmark* which is equivalent with git branch.
+      # But, bookmark is not implemented.
+      cond << "#{Changeset.table_name}.scmid IN (?)"
+      # Revisions in root directory and sub directory are not equal.
+      # So, in order to get correct limit, we need to get all revisions.
+      # But, it is very heavy.
+      args << scm.nodes_in_branch(rev, :limit => limit)
+    elsif last = rev ? find_changeset_by_name(scm.tagmap[rev] || rev) : nil
       cond << "#{Changeset.table_name}.id <= ?"
       args << last.id
     end