Defect #43965 » fix-changeset-previous-next-order-v2.patch
| app/models/changeset.rb | ||
|---|---|---|
| 191 | 191 | |
| 192 | 192 |
# Returns the previous changeset |
| 193 | 193 |
def previous |
| 194 |
@previous ||= Changeset.where(["id < ? AND repository_id = ?", id, repository_id]).order(id: :desc).first
|
|
| 194 |
@previous ||= repository&.previous_changeset(self)
|
|
| 195 | 195 |
end |
| 196 | 196 | |
| 197 | 197 |
# Returns the next changeset |
| 198 | 198 |
def next |
| 199 |
@next ||= Changeset.where(["id > ? AND repository_id = ?", id, repository_id]).order(:id).first
|
|
| 199 |
@next ||= repository&.next_changeset(self)
|
|
| 200 | 200 |
end |
| 201 | 201 | |
| 202 | 202 |
# Creates a new Change from it's common parameters |
| app/models/repository.rb | ||
|---|---|---|
| 265 | 265 |
@latest_changeset ||= changesets.first |
| 266 | 266 |
end |
| 267 | 267 | |
| 268 |
def previous_changeset(changeset) |
|
| 269 |
changesets. |
|
| 270 |
reorder(nil). |
|
| 271 |
where( |
|
| 272 |
[ |
|
| 273 |
"(#{Changeset.table_name}.committed_on < ? OR " \
|
|
| 274 |
"(#{Changeset.table_name}.committed_on = ? AND #{Changeset.table_name}.id < ?))",
|
|
| 275 |
changeset.committed_on, changeset.committed_on, changeset.id |
|
| 276 |
] |
|
| 277 |
). |
|
| 278 |
order(committed_on: :desc, id: :desc). |
|
| 279 |
first |
|
| 280 |
end |
|
| 281 | ||
| 282 |
def next_changeset(changeset) |
|
| 283 |
changesets. |
|
| 284 |
reorder(nil). |
|
| 285 |
where( |
|
| 286 |
[ |
|
| 287 |
"(#{Changeset.table_name}.committed_on > ? OR " \
|
|
| 288 |
"(#{Changeset.table_name}.committed_on = ? AND #{Changeset.table_name}.id > ?))",
|
|
| 289 |
changeset.committed_on, changeset.committed_on, changeset.id |
|
| 290 |
] |
|
| 291 |
). |
|
| 292 |
order(committed_on: :asc, id: :asc). |
|
| 293 |
first |
|
| 294 |
end |
|
| 295 | ||
| 268 | 296 |
# Returns the latest changesets for +path+ |
| 269 | 297 |
# Default behaviour is to search in cached changesets |
| 270 | 298 |
def latest_changesets(path, rev, limit=10) |
| app/models/repository/mercurial.rb | ||
|---|---|---|
| 128 | 128 |
to_a |
| 129 | 129 |
end |
| 130 | 130 | |
| 131 |
def previous_changeset(changeset) |
|
| 132 |
changesets. |
|
| 133 |
where("#{Changeset.table_name}.id < ?", changeset.id).
|
|
| 134 |
reorder(id: :desc). |
|
| 135 |
first |
|
| 136 |
end |
|
| 137 | ||
| 138 |
def next_changeset(changeset) |
|
| 139 |
changesets. |
|
| 140 |
where("#{Changeset.table_name}.id > ?", changeset.id).
|
|
| 141 |
reorder(id: :asc). |
|
| 142 |
first |
|
| 143 |
end |
|
| 144 | ||
| 131 | 145 |
def is_short_id_in_db? |
| 132 | 146 |
return @is_short_id_in_db unless @is_short_id_in_db.nil? |
| 133 | 147 | |
| test/unit/changeset_test.rb | ||
|---|---|---|
| 468 | 468 |
assert_equal Changeset.find_by_revision('2'), changeset.previous
|
| 469 | 469 |
end |
| 470 | 470 | |
| 471 |
def test_previous_uses_same_order_as_changeset_list |
|
| 472 |
repository = |
|
| 473 |
Repository::Subversion.create!( |
|
| 474 |
:project => Project.find(3), |
|
| 475 |
:url => 'svn://localhost/test/previous-order' |
|
| 476 |
) |
|
| 477 |
newer_changeset = |
|
| 478 |
Changeset.create!( |
|
| 479 |
:repository => repository, |
|
| 480 |
:committed_on => Time.utc(2025, 4, 8, 10, 0, 0), |
|
| 481 |
:comments => 'Newer changeset', |
|
| 482 |
:revision => 'previous-order-newer' |
|
| 483 |
) |
|
| 484 |
older_changeset = |
|
| 485 |
Changeset.create!( |
|
| 486 |
:repository => repository, |
|
| 487 |
:committed_on => Time.utc(2025, 4, 7, 10, 0, 0), |
|
| 488 |
:comments => 'Older changeset', |
|
| 489 |
:revision => 'previous-order-older' |
|
| 490 |
) |
|
| 491 | ||
| 492 |
assert_equal older_changeset, newer_changeset.previous |
|
| 493 |
end |
|
| 494 | ||
| 471 | 495 |
def test_previous_nil |
| 472 | 496 |
changeset = Changeset.find_by_revision('1')
|
| 473 | 497 |
assert_nil changeset.previous |
| ... | ... | |
| 478 | 502 |
assert_equal Changeset.find_by_revision('3'), changeset.next
|
| 479 | 503 |
end |
| 480 | 504 | |
| 505 |
def test_next_uses_same_order_as_changeset_list |
|
| 506 |
repository = |
|
| 507 |
Repository::Subversion.create!( |
|
| 508 |
:project => Project.find(3), |
|
| 509 |
:url => 'svn://localhost/test/next-order' |
|
| 510 |
) |
|
| 511 |
newer_changeset = |
|
| 512 |
Changeset.create!( |
|
| 513 |
:repository => repository, |
|
| 514 |
:committed_on => Time.utc(2025, 4, 8, 10, 0, 0), |
|
| 515 |
:comments => 'Newer changeset', |
|
| 516 |
:revision => 'next-order-newer' |
|
| 517 |
) |
|
| 518 |
older_changeset = |
|
| 519 |
Changeset.create!( |
|
| 520 |
:repository => repository, |
|
| 521 |
:committed_on => Time.utc(2025, 4, 7, 10, 0, 0), |
|
| 522 |
:comments => 'Older changeset', |
|
| 523 |
:revision => 'next-order-older' |
|
| 524 |
) |
|
| 525 | ||
| 526 |
assert_equal newer_changeset, older_changeset.next |
|
| 527 |
end |
|
| 528 | ||
| 481 | 529 |
def test_next_nil |
| 482 | 530 |
changeset = Changeset.find_by_revision('11')
|
| 483 | 531 |
assert_nil changeset.next |
- « Previous
- 1
- 2
- Next »