|
1 | 1 | import os
|
2 | 2 | import shutil
|
3 |
| -import time |
4 | 3 | from pathlib import Path
|
5 | 4 | from typing import Any, Optional
|
6 | 5 |
|
@@ -423,170 +422,21 @@ def test_iter_remote_refs(
|
423 | 422 | } == set(git.iter_remote_refs(remote))
|
424 | 423 |
|
425 | 424 |
|
426 |
| -def _gen(scm: Git, s: str, commit_timestamp: Optional[float] = None) -> str: |
427 |
| - with open(s, mode="w") as f: |
428 |
| - f.write(s) |
429 |
| - scm.dulwich.add([s]) |
430 |
| - scm.dulwich.repo.do_commit( |
431 |
| - message=s.encode("utf-8"), commit_timestamp=commit_timestamp |
432 |
| - ) |
433 |
| - return scm.get_rev() |
434 |
| - |
435 |
| - |
| 425 | +@pytest.mark.skip_git_backend("dulwich", "pygit2") |
436 | 426 | def test_list_all_commits(tmp_dir: TmpDir, scm: Git, git: Git, matcher: type[Matcher]):
|
437 |
| - assert git.list_all_commits() == [] |
438 |
| - # https://github.com/libgit2/libgit2/issues/6336 |
439 |
| - now = time.time() |
440 |
| - |
441 |
| - rev_a = _gen(scm, "a", commit_timestamp=now - 10) |
442 |
| - rev_b = _gen(scm, "b", commit_timestamp=now - 8) |
443 |
| - rev_c = _gen(scm, "c", commit_timestamp=now - 5) |
444 |
| - rev_d = _gen(scm, "d", commit_timestamp=now - 2) |
445 |
| - |
446 |
| - assert git.list_all_commits() == [rev_d, rev_c, rev_b, rev_a] |
447 |
| - |
448 |
| - scm.gitpython.git.reset(rev_b, hard=True) |
449 |
| - assert git.list_all_commits() == [rev_b, rev_a] |
450 |
| - |
451 |
| - |
452 |
| -def test_list_all_commits_branch( |
453 |
| - tmp_dir: TmpDir, scm: Git, git: Git, matcher: type[Matcher] |
454 |
| -): |
455 |
| - revs = {} |
456 |
| - now = time.time() |
457 |
| - |
458 |
| - revs["1"] = _gen(scm, "a", commit_timestamp=now - 10) |
459 |
| - |
460 |
| - scm.checkout("branch", create_new=True) |
461 |
| - revs["3"] = _gen(scm, "c", commit_timestamp=now - 9) |
462 |
| - |
463 |
| - scm.checkout("master") |
464 |
| - revs["2"] = _gen(scm, "b", commit_timestamp=now - 7) |
465 |
| - |
466 |
| - scm.checkout("branch") |
467 |
| - revs["5"] = _gen(scm, "e", commit_timestamp=now - 6) |
468 |
| - |
469 |
| - scm.checkout("master") |
470 |
| - revs["4"] = _gen(scm, "d", commit_timestamp=now - 5) |
471 |
| - |
472 |
| - scm.checkout("branch") |
473 |
| - revs["6"] = _gen(scm, "f", commit_timestamp=now - 4) |
474 |
| - |
475 |
| - scm.checkout("master") |
476 |
| - revs["7"] = _gen(scm, "g", commit_timestamp=now - 3) |
477 |
| - revs["8"] = scm.merge("branch", msg="merge branch") |
478 |
| - |
479 |
| - inv_map = {v: k for k, v in revs.items()} |
480 |
| - assert [inv_map[k] for k in git.list_all_commits()] == [ |
481 |
| - "8", |
482 |
| - "7", |
483 |
| - "6", |
484 |
| - "4", |
485 |
| - "5", |
486 |
| - "2", |
487 |
| - "3", |
488 |
| - "1", |
489 |
| - ] |
490 |
| - |
| 427 | + def _gen(s): |
| 428 | + tmp_dir.gen(s, s) |
| 429 | + scm.add_commit(s, message=s) |
| 430 | + return scm.get_rev() |
491 | 431 |
|
492 |
| -def test_list_all_tags(tmp_dir: TmpDir, scm: Git, git: Git, matcher: type[Matcher]): |
493 |
| - rev_a = _gen(scm, "a") |
| 432 | + rev_a = _gen("a") |
| 433 | + rev_b = _gen("b") |
494 | 434 | scm.tag("tag")
|
495 |
| - rev_b = _gen(scm, "b") |
496 |
| - scm.tag("annotated", annotated=True, message="Annotated Tag") |
497 |
| - rev_c = _gen(scm, "c") |
498 |
| - rev_d = _gen(scm, "d") |
499 |
| - assert git.list_all_commits() == matcher.unordered(rev_d, rev_c, rev_b, rev_a) |
500 |
| - |
501 |
| - rev_e = _gen(scm, "e") |
502 |
| - scm.tag( |
503 |
| - "annotated2", |
504 |
| - target="refs/tags/annotated", |
505 |
| - annotated=True, |
506 |
| - message="Annotated Tag", |
507 |
| - ) |
508 |
| - assert git.list_all_commits() == matcher.unordered( |
509 |
| - rev_e, rev_d, rev_c, rev_b, rev_a |
510 |
| - ) |
511 |
| - |
512 |
| - rev_f = _gen(scm, "f") |
513 |
| - scm.tag( |
514 |
| - "annotated3", |
515 |
| - target="refs/tags/annotated2", |
516 |
| - annotated=True, |
517 |
| - message="Annotated Tag 3", |
518 |
| - ) |
519 |
| - assert git.list_all_commits() == matcher.unordered( |
520 |
| - rev_f, rev_e, rev_d, rev_c, rev_b, rev_a |
521 |
| - ) |
522 |
| - |
523 |
| - scm.gitpython.git.reset(rev_a, hard=True) |
524 |
| - assert git.list_all_commits() == matcher.unordered(rev_b, rev_a) |
525 |
| - |
526 |
| - |
527 |
| -def test_list_all_commits_dangling_annotated_tag(tmp_dir: TmpDir, scm: Git, git: Git): |
528 |
| - rev_a = _gen(scm, "a") |
529 |
| - scm.tag("annotated", annotated=True, message="Annotated Tag") |
530 |
| - |
531 |
| - _gen(scm, "b") |
532 |
| - |
533 |
| - # Delete branch pointing to rev_a |
534 |
| - scm.checkout(rev_a) |
535 |
| - scm.gitpython.repo.delete_head("master", force=True) |
536 |
| - |
537 |
| - assert git.list_all_commits() == [rev_a] # Only reachable via the tag |
538 |
| - |
539 |
| - |
540 |
| -def test_list_all_commits_orphan( |
541 |
| - tmp_dir: TmpDir, scm: Git, git: Git, matcher: type[Matcher] |
542 |
| -): |
543 |
| - rev_a = _gen(scm, "a") |
544 |
| - |
545 |
| - # Make an orphan branch |
546 |
| - scm.gitpython.git.checkout("--orphan", "orphan-branch") |
547 |
| - rev_orphan = _gen(scm, "orphanfile") |
548 |
| - |
549 |
| - assert rev_orphan != rev_a |
550 |
| - assert git.list_all_commits() == matcher.unordered(rev_orphan, rev_a) |
551 |
| - |
552 |
| - |
553 |
| -def test_list_all_commits_refs( |
554 |
| - tmp_dir: TmpDir, scm: Git, git: Git, matcher: type[Matcher] |
555 |
| -): |
556 |
| - assert git.list_all_commits() == [] |
557 |
| - |
558 |
| - rev_a = _gen(scm, "a") |
559 |
| - |
560 |
| - assert git.list_all_commits() == [rev_a] |
561 |
| - rev_b = _gen(scm, "b") |
562 |
| - scm.set_ref("refs/remotes/origin/feature", rev_b) |
563 |
| - assert git.list_all_commits() == matcher.unordered(rev_b, rev_a) |
564 |
| - |
565 |
| - # also add refs/exps/foo/bar |
566 |
| - rev_c = _gen(scm, "c") |
567 |
| - scm.set_ref("refs/exps/foo/bar", rev_c) |
568 |
| - assert git.list_all_commits() == matcher.unordered(rev_c, rev_b, rev_a) |
569 |
| - |
570 |
| - # Dangling/broken ref --- |
571 |
| - scm.set_ref("refs/heads/bad-ref", "deadbeefdeadbeefdeadbeefdeadbeefdeadbeef") |
572 |
| - with pytest.raises(Exception): # noqa: B017, PT011 |
573 |
| - git.list_all_commits() |
574 |
| - scm.remove_ref("refs/heads/bad-ref") |
575 |
| - |
| 435 | + rev_c = _gen("c") |
576 | 436 | scm.gitpython.git.reset(rev_a, hard=True)
|
577 |
| - assert git.list_all_commits() == matcher.unordered(rev_b, rev_a) |
578 |
| - |
579 |
| - |
580 |
| -def test_list_all_commits_detached_head( |
581 |
| - tmp_dir: TmpDir, scm: Git, git: Git, matcher: type[Matcher] |
582 |
| -): |
583 |
| - rev_a = _gen(scm, "a") |
584 |
| - rev_b = _gen(scm, "b") |
585 |
| - rev_c = _gen(scm, "c") |
586 |
| - scm.checkout(rev_b) |
| 437 | + scm.set_ref("refs/foo/bar", rev_c) |
587 | 438 |
|
588 |
| - assert scm.pygit2.repo.head_is_detached |
589 |
| - assert git.list_all_commits() == matcher.unordered(rev_c, rev_b, rev_a) |
| 439 | + assert git.list_all_commits() == matcher.unordered(rev_a, rev_b) |
590 | 440 |
|
591 | 441 |
|
592 | 442 | @pytest.mark.skip_git_backend("pygit2")
|
|
0 commit comments