본문 바로가기
개발/Git, GitHub

깃허브 - RESTful API로 파일 이름 변경하기 (Renaming files)

by 피로물든딸기 2023. 10. 16.
반응형

깃허브 데스크탑으로 프로젝트 관리하기 강의 오픈!! (인프런 바로가기)

 

Git / GitHub 전체 링크

 

참고

- RESTful API로 파일 읽기

- RESTful API로 파일 쓰기

- RESTful API로 파일 삭제하기

 

이름을 변경하는 API는 지원하지 않는 것으로 보인다.

따라서 파일을 읽어서(GET) 다른 이름으로 그대로 쓰고(PUT), 원본 파일을 지운다(DELETE).

 

전체 코드는 다음과 같다.

(auto-test 저장소의 test/apitest.txt 파일을 test/apitest_new.txt로 변경)

let myKey = "...";

const { Octokit } = require("@octokit/rest");

const octokit = new Octokit({
  auth: myKey,
});

async function renameFile() {
  const owner = "bloodstrawberry";
  const repo = "auto-test";
  const oldPath = "test/apitest.txt";
  const newPath = "test/apitest_new.txt";

  const result = await octokit.request(
    `GET /repos/${owner}/${repo}/contents/${oldPath}`,
    {
      owner,
      repo,
      path: oldPath,
    }
  );

  console.log(result);

  if(result.status !== 200) {
    console.log("File Read Error!");
    return;
  }
  
  const file = result.data;

  const renameResult = await octokit.request(
    `PUT /repos/${owner}/${repo}/contents/${newPath}`,
    {
      owner,
      repo,
      path: newPath,

      content: file.content,
      message: "Rename file",
      sha: file.sha,
      headers: {
        "X-GitHub-Api-Version": "2022-11-28",
      },
    }
  );

  console.log(renameResult);
  if(renameResult.status !== 201) { // 200인 경우는 이미 존재하는 파일을 덮어씌움.
    console.log("File Create Error!");
    return;
  }

  const deleteResult = await octokit.request(
    `DELETE /repos/${owner}/${repo}/contents/${oldPath}`,
    {
      owner,
      repo,
      path: oldPath,
      message : "delete!!",
      sha: file.sha,        
    }
  );
  
  console.log(deleteResult);
  if(deleteResult.status !== 200) {
    console.log("File Delete Error!");
    return;
  }
}

renameFile();

반응형

댓글