|
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