제출 산열에서pull request 페이지를 열거나 가져오는 명령행 도구 tosa

8128 단어 GitGoGitHub

이거 뭐야?


git의 제출 산열에서pull request 페이지를 열고 정보를 얻는 명령줄 도구입니다.

언제 써요?


Giit가 관리하는 코드인데 왜 지금의 실크로 변했는지 알고 싶어요.이때 수수료 격차를 보고도 의도를 잘 알지 못했지만, 제출한 사람이 퇴직했으니 사실상 자신이 낸 수수료는 잘 기억나지 않는 것일까?
GiitHub를 사용하여 코드를 관리할 때pull request 페이지를 참조하면 코드 심사와 심사를 거친 로그를 확인하여 개발 효율을 높일 수 있습니다.또한 미래를 위해pullrequest는 이러한 변화된 기록을 잘 보존하는 것이 팀을 뿌리내리게 하는 동기라고 생각합니다.

설치하다.


Homebrew 사용자인 경우 다음 명령을 사용하여 간단히 설치할 수 있습니다.
$ brew tap kyoshidajp/tosa
$ brew install tosa
또한 Go에 설치되어 있으므로 Go 환경이 설치되어 있으면 go get에 설치할 수 있습니다.
$ go get -u github.com/kyoshidajp/tosa
이외에도 릴리즈 페이지에서 동작 환경에 맞는 파일을 다운로드하고 펼치면 tosa를 실행 경로를 통과하는 곳에 놓는다.

실행 방법


매개 변수에 제출 산열을 지정하면 기본 브라우저에서pull request 페이지를 열 것입니다.
$ tosa c97e6909
처음 시작할 때 Giithub의 로그인 알림을 표시하려면 사용자 이름, 비밀번호, 2단계 인증 코드를 입력해야 합니다.이는 Giithub API가 개인 저장소를 포함하는 검색에 사용되기 때문입니다.CI 등을 사용하여 실행할 때, 방문 영패를 환경 변수 GITHUB_TOKEN 로 설정하면 이 항목이 우선입니다.

시간에서 시작


tig 사용자$HOME/.tigrc라면 다음 버튼 귀속 설정을 미리 하는 것이 편리합니다.
bind main O @tosa %(commit)
bind blame O @tosa %(commit)
홈 보기와 blame 보기에서 O (Shift+o) 를 누르면 커서 위치의 제출 해시에서pull request URL을 열 수 있습니다.

URL 출력

-u 또는 --url를 지정하면 URL이 출력됩니다.
% tosa -u c97e6909
https://github.com/kyoshidajp/tosa/pull/13
사용 상황으로 ssh를 통해 연결된 원격 기기에서 브라우저가 직접 시작되지 않을 경우를 가정합니다.

API URL 출력

-a 또는 --apiurl를 지정하면 API URL이 출력됩니다.
$ tosa -a c97e6909
https://api.github.com/repos/kyoshidajp/tosa/issues/13
이것을 컬에게 건네주면 jq성형을 받을 수 있다.다음은 pull request 제목을 가져오는 예입니다.
$ curl -s `tosa -a c97e6909` | jq -r '.title'
Add short command option and usage
API에서 가져올 수 있는 항목은 참조Issues | GitHub Developer Guide하십시오.
예를 들어 상세한 발행 수첩을 자동으로 생성한다.지난번에 발표된 수정 내용에 대한git-log를 사용하여 산열 목록을 제출하고pullrequest 데이터로 수정 개요와 수정된 사용자 정보를 출력할 수 있도록 합니다.

pull request는 어떻게 얻습니까?


Giithub APISearch issues에서 검색 키워드'해시 제출''창고''pull request 상태'를 지정하여 검색합니다.
예를 들어 토사의 제출 해시c97e6909의 검색 조건 매개 변수qq=repo:kyoshidajp/tosa pr:merged c97e6909이다.
URL 인코딩이 수행된 최종 검색 URL은 다음과 같습니다.
이 응답에 포함된 html_url은pull request의 URL입니다.현재 응답 items 은 여러 개로 되돌아오지만, 앞의 1개는 일치해야 합니다.
API에 대한 액세스와 데이터를 Go API의 클라이언트 라이브러리go-github에서 가져옵니다.
참고로 API가 아닌 일반적인 웹 검색을 통해서도 얻을 수 있다.검색 상자에서 아까 repo:kyoshidajp/tosa pr:merged c97e6909 로 검색하십시오.

검색 결과의 페이지 URL은 여기에 있습니다.

참고할 수 있는 아이디어, 도구


Giit 기반 Code ding Tips-cookpad 개발자 블로그


제출 산열에서pull request 페이지를 열 생각은 원래 이곳에서 소개한 것이기 때문에 매우 편리하게 이용할 수 있다.다만, 간혹 무관한pull request 페이지가 뜨거워지면서 창고를 바꿀 때마다 URL$YOUR_REPO_URL을 설정해야 하는 불편함이 있었다.
또 루비 가입을 전제로 조개껍질을 편입하는 형태도 있는데, 당시 재적한 팀(루비가 설치되지 않은 윈도 환경)이 침투하지 않았던 것으로 기억한다.

pocke/whichpr: Find a pull request form commit hash.


검색 실현 부분은 이쪽 도구를 참고했습니다.다만, OSS의 구성을 개인적으로 변경하고 싶은 상시 포크의 창고가 잘 작동하지 않고, API URL 출력 등의 기능을 추가해 새롭게 제작했다.

tcnksm/ghr: Upload multiple artifacts to GitHub Release in parallel


특히 Go CLI 설치 상태 코드, 디버그 함수, Makefile 쓰기 방법에 대해서는 전혀 모르기 때문에 참고합니다.또한 Release용 업로드에서 실제로 사용됩니다.

앞으로의 과제


GitLab, Bitbucket 등 기타 git 서비스 지원


깃허브뿐만 아니라 깃랩과 비트bucket 등 깃허핑 서비스를 이용하는 이용자가 일정 수 있어 활용이 가능하다.
다만, 조금 조사해보니 GitLab에서 제출 주제만 찾은 것 같고 merge reuqest는 찾지 못했다.다른 서비스는 아직 조사하지 않았습니다.

고속화


현재 API의 요청은 시간이 오래 걸렸고 특히 포크의 창고 데이터를 가져올 때 최대 3차례의 네트워크 접근을 하기 때문에 매우 늦을 것이다.
  • 제출 해싱에서 PR 읽어들이기
  • 1. 에 PR 페이지의 URL이 없기 때문에 부모님의 창고에서 PR을 검색하고 얻기
  • curl 등을 통한 API URL 액세스
  • 이에 대해 다음과 같은 생각과 진일보한 과제가 있다.
  • 해싱 및 URL을 커밋하는 매핑 캐시 도입
  • 어떤 형식으로 무엇을 캐시하는지 연구해야 한다
  • HTML URL은 필수입니다. 다른 데이터는 어떻게 합니까?옵션 선택?
  • 예상 활용 시 캐시 성공률을 기대할 수 없음
  • 포크의 창고는 부모님의 창고를 먼저 점검한다
  • 부모님 창고 취득 시에도 네트워크 요청
  • 캐시?
  • GiitHub GraphiQL APIv4의 대응
  • 아래 설명
  • GTHub GraphiQL APIv4 지원


    현재 토사 사용GitHub API v3, 지티허브는 그래픽QL에 대응하는 차세대GitHub GraphQL API v4를 공개했다.
    예를 들어 tosa의 c97e 6909 병합된 pull request의 제목과 URL을 검색한 것은 다음과 같다.
    query { 
      search(type: ISSUE, query: "repo:kyoshidajp/tosa pr:merged c97e6909", first: 1) {
        edges {
          node {
            ... on PullRequest {
              title
              url
            }
          }
        }
      }
    }
    
    실행 결과는 다음과 같습니다.
    {
      "data": {
        "search": {
          "edges": [
            {
              "node": {
                "title": "Add short command option and usage",
                "url": "https://github.com/kyoshidajp/tosa/pull/13"
              }
            }
          ]
        }
      }
    }
    
    참고로 GraphQL API Explorer부터 확인할 수 있습니다.
    이렇게 되면 좋을 것 같지는 않지만, 그래픽QL이기 때문에 효율적인 데이터 확보를 기대할 수 있다.
    예를 들어pull request에서 제출한 사용자의 가상 이미지 URL을 얻으려면curl 요청 중간에 jq 등으로 성형하는 시간이 필요하고 GiitHub GraphiQL APIv4는 필요 없고 요청 하나만 하면 된다.
    Go에는 GiitHub GraphiQL APIv4에 해당하는githubql 라이브러리가 이미 있습니다.조회는 구조로 정의되기 때문에reflect 패키지를 사용하여 사용자의 요구에 따라 동적 정의를 하는 것이 가장 좋다.

    좋은 웹페이지 즐겨찾기