Skip to content

[new feature]: squash merge 로직의 변경 방안 #899

Description

@chae-dahee

관련 이슈

Issuie #870
PR #897

기능 설명

초기 로딩되는 깃 데이터를 적절히 페이지네이션 하기 위한 선제작업입니다.
csmDict 를 최신 -> 과거 순서로 제공합니다.

기능 목록

  • CSM 생성시 reverse 제거
  • Squash Merge 로직 DFS 변경
    추후 페이지네이션을 고려한다면 stemDict 를 자르고, 잘린 커밋에 대해 buildCSMNode의 DFS 를 실행하는 방식이 될 것 같습니다.. (확실하지 않음)
  • csm.spec.ts 테스트 expect 을 최신>과거로 수정
    최신 > 과거 커밋 순서에서, stemDict 를 사용하는 방법으로는 squash Merge 를 적합하게 찾기 어려웠습니다. 따라서 로직을 DFS 로 수정했습니다. (이부분이 PR 코드리뷰에서 멘토님께서 말씀하신 연관된 엔진 같습니다)

✅ 따라서 최신 > 과거 순서를 유지한다고 할때,
기존 로직(stemDict 활용)을 사용한다면 squash merge 의 부모를 어떻게 찾느냐
개선 로직(DFS, commitDict 활용) : 페이지네이션과 어떻게 접목하느냐
둘중에 어떤게 적절한지 논의가 필요합니다! 그럼 이후 일감의 방향을 잡을 수 있을 것 같아요ㅎㅎ

참고

테스트케이스의 커밋 흐름은 아래와 같습니다.

  // master = [0, 1,              2,                 3, 4, 5]
  // sub1 =         [6,7,       8,  9,10,         11]
  // sub2 =              [12,13,         14,15,16]
  1. master 브랜치는 0 커밋에서 시작해 1 커밋으로 이어집니다.
  2. 커밋 1 지점에서 sub1 브랜치가 분기되어, 6, 7 커밋을 만듭니다.
  3. sub1 브랜치의 7 커밋 지점에서 sub2 브랜치가 분기되어, 12, 13 커밋을 만듭니다.
  4. sub1 브랜치의 8 커밋은 sub2 브랜치의 13 커밋을 병합하여 생성되었습니다.
  5. master 브랜치의 2 커밋은 sub1 브랜치의 8 커밋을 병합하여 생성되었습니다.
  6. 커밋 2 지점에서 sub1 브랜치가 다시 분기되어 9, 10 커밋을 만듭니다.
  7. sub1 브랜치의 10 커밋 지점에서 sub2 브랜치는 다시 분기되어 14, 15, 16 커밋을 생성합니다.
  8. sub1 브랜치의 11 커밋은 sub2 브랜치의 16 커밋을 병합하여 만들어졌습니다.
  9. master 브랜치의 3 커밋은 sub1 브랜치의 11 커밋을 병합하여 생성되었습니다.
  10. 이후 master 브랜치에 4, 5 커밋이 차례로 이어집니다.

// 0,1,4,5 commits have no-squash-commits
// 2 commit has squash-commits(8,13,12,7,6)
// 3 commit has squash-commits(11,16,15,14,10,9)

Metadata

Metadata

Type

Fields

No fields configured for Task.

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions