[Git 만들어보기 - Geet] geet init 명령어로 .geet 폴더 생성

송준섭 Junseop Song·2024년 2월 1일
post-thumbnail

2024-01-02 구현

받아온 args에서 데이터를 추출하는 parseCommandLine 함수 추가

// parser/ParseCommandLine.kt
package parser

fun parseCommandLine(args: Array<String>): Map<String, String> {
    if (args.isEmpty()) {  // 아무 커맨드라인도 입력하지 않은 경우
        return mapOf()
    }

    val parseData = mutableMapOf<String, String>()
    parseData["command"] = args[0]  // 추후 옵션에 관한 데이터도 추가할 예정
    return parseData
}

Geet 명령어를 처리하는 processGeet 함수, 아무 커맨드도 입력하지 않은 경우 Geet 설명을 출력하는 guideGeet 함수 추가

// geet/ProcessGeet.kt
package geet

import geet.commands.*

fun processGeet(parseData: Map<String, String>): Unit {
    when (parseData["command"]) {
        "init" -> geetInit()  // "init" 명령어 입력한 경우
        null -> guideGeet()  // 아무 명령어도 입력하지 않은 경우 설명 출력
        else -> println("'geet ${parseData["command"]}'은 지원하는 명령어가 아닙니다.")  // 지원하지 않는 명령어를 입력한 경우
    }
}

fun guideGeet(): Unit {
    println("<<<Geet - Git 따라 만들면서 파악하기>>>")
    println()

    println("현재 사용 가능한 명령어 목록")  // 추후 계속 추가할 예정
    println("   init     현재 디렉토리에 새로운 Geet 저장소를 초기화합니다.")
    println()

    println("----------------------------------------")
    println("깃헙 저장소 링크 - https://github.com/SongJSeop/Geet")
    println("학습 및 개발 기록 링크 - https://abyssinian-cherry-9fc.notion.site/Geet-Git-2442af8184ee48c6ae8eb5990ff7652d")
}

이제 init 명령어를 처리하는 geetInit 함수 추가

// geet/commands/GeetInit.kt
package geet.commands

import java.io.File

fun geetInit(): Unit {
    if (File(".geet").exists()) {
        println("이미 Geet 저장소가 초기화되어 있습니다.")
        return
    }

    File(".geet").mkdir()
    File(".geet/HEAD").writeText("ref: refs/heads/master")
    File(".geet/config").writeText("""
        [core]
            repositoryformatversion = 0
            filemode = true
            bare = false
            logallrefupdates = true
            ignorecase = true
            precomposeunicode = true
    """.trimIndent())
    File(".geet/description").writeText("Unnamed geet repository; edit this file 'description' to name the repository.")
    File(".geet/hooks").mkdir()
    File(".geet/info").mkdir()
    File(".geet/objects").mkdir()
    File(".geet/objects/info").mkdir()
    File(".geet/objects/pack").mkdir()
    File(".geet/refs").mkdir()
    File(".geet/refs/heads").mkdir()
    File(".geet/refs/tags").mkdir()
    println("Geet 저장소를 초기화했습니다.")
}

일단 여기까지 하고 빌드 후 실행해 보았음

.geet 폴더 및 하위 파일, 폴더들이 잘 생성된 모습

0개의 댓글