GitLab에서도 Commit Hash에서 해당 MR을 찾고 싶습니다.

무슨 일이야?



코드가 변경된 GitLab의 Merge Request (MR)로 Emacs에서 (터미널에서) 단번에 점프 할 수 있습니다.

(최신 버전은 여기에 있습니다)
GitHub/gitlab-mr-from-commit

터미널에서 브라우저 MR로 비행





Emacs에서 브라우저 MR로 비행





제약


  • Git Lab은 소스 코드를 관리합니다
  • git remote -v 했을 때의 URL이 https:// 로 시작된다 ( git@ 그렇다고 현행 버젼이라고 실패한다.요망하면 개수합니다)
  • (터미널에서 하고 싶은 사람) tig 가 설치되어 있다
  • (Emacs에서 할 사람) vc-annotate가 설치되어 있습니다.

    동기 부여



    여러 사람이 개발하고 있다면 "이 코드는 어떤 경위로 쓰여졌을까"라고 여러가지 생각해 해당 Pull Request(Merge Request)를 찾는 기회가 늘어났다. 그럴 때마다 브라우저를 열고 해당 파일을 찾아서 git blame 하고 링크를 따라 와서.....

    그런 때 Emacs에서 현재 보고 있는 행을 변경한 PR을 열도록 했다 라는 기사를 발견. 이것은 Git Hub에서 비슷한 일을 할 수 있었기 때문에 Git Lab에서도 하고 싶다! 라고 생각했습니다.

    실행 방법



    다음의 스크립트를 적당한 곳에 둔다(이름은 gitlab-mr-from-commit실행 권한을 부여하는 것을 잊지 마세요 ( chmod +x gitlab-mr-from-commit )
    #!/bin/bash
    
    # NOTE: Get it from gitlab
    PRIVATE_TOKEN='[YOUR PRIVATE TOKEN]'
    
    # NOTE: Get it from your project's setting page
    PROJECT_ID='[YOUR PROJECT ID]'
    
    # NOTE: URL should start from `[https|http]://`
    PROJECT_URL=$(git config remote.origin.url | cut -f2 | rev | cut -c 5- | rev)
    
    # NOTE: Set your commit hash
    COMMIT_HASH=$1
    
    # Get response
    curl_response=$(curl -s --request GET --header "PRIVATE-TOKEN: ${PRIVATE_TOKEN}" https://gitlab.com/api/v4/projects/${PROJECT_ID}/repository/commits/${COMMIT_HASH}/merge_requests)
    
    # Convert response into json format
    response_json=$(echo "${curl_response}" | cut -c 2- | rev | cut -c 2- | rev)
    
    # MR's ID
    mr_id=$(echo "${response_json}" | jq -r '.iid')
    
    # NOTE: Choose your fav browser
    open -a "Google Chrome" ${PROJECT_URL}/merge_requests/${mr_id}
    

    1. gitlab에서 private access token 얻기



    여기에서 갈 수 있습니다.gitlab-mr-from-commit 의 PRIVATE_TOKEN 부분에 다음과 같이 붙여넣기
    # NOTE: Get it from gitlab
    PRIVATE_TOKEN='ABCDEFGH'
    

    2. gitlab의 project id 얻기


    https://gitlab.com/USER_NAME/PROJECT_NAME/edit

    gitlab-mr-from-commit의 PROJECT_ID 부분에 다음과 같이 붙여 넣기
    # NOTE: Get it from your project's setting page
    PROJECT_ID='12345'
    

    터미널에서 해보자!



    1. 터미널에서 gitlab 프로젝트로 이동


    $ cd my-gitlab-project
    

    2. .tigrc에 다음을 추가


    # .tigrc
    bind generic O @gitlab-mr-from-commit %(commit)
    

    3. 터미널에서 다음과 같이 실행


    # tigでやりたい人は
    $ tig [FILE]
    # tigで該当Commitにカーソルをあわせて, `O`
    
    # or
    $ gitlab-mr-from-commit [COMMIT_HASH]
    

    Emacs에서 해보자!



    평상시 코드 리딩은 Emacs로 하고 있으므로, Emacs상에서 MR에 날 수 있으면 편리(정직 이것이 본제)
    Emacs에서 현재 보고 있는 행을 변경한 PR을 열도록 했다 을 참고로.

    1. init.el 에 다음을 기술


    ;; init.elに記述
    (defun gitlab-open-mr ()
      (interactive)
      (let* ((rev-at-line (vc-annotate-extract-revision-at-line))
             (rev (car rev-at-line)))
        (shell-command (concat "gitlab-mr-from-commit " rev))))
    
    ;; キーバインドはお好みで
    (global-set-key (kbd "C-o") 'gitlab-open-mr)
    

    2. vc-annotate 시작


    M-x vc-annotate

    3. 해당 변경 사항으로 이동하여 gitlab-open-mr을 시작합니다.


    Ctrl+o

    코드



    코드 자체는 여기에 둡니다 (현재 꽤 잡이므로, 개수의 PR 대환영입니다)
    GitHub/gitlab-mr-from-commit

    참고



    Emacs에서 현재 보고 있는 행을 변경한 PR을 열도록 했다
    Commit Hash에서 해당 Pull Request를 찾는 방법
    List Merge Requests associated with a commit
  • 좋은 웹페이지 즐겨찾기