151 lines
4.5 KiB
C#
151 lines
4.5 KiB
C#
using LibGit2Sharp;
|
|
using NLog;
|
|
using Server.System;
|
|
using System.Diagnostics;
|
|
|
|
namespace Server.Git
|
|
{
|
|
public abstract class AbstractGit
|
|
{
|
|
private static readonly NLog.ILogger logger = LogManager.GetCurrentClassLogger();
|
|
public bool isRestart;
|
|
string _repositoryPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "excel");
|
|
|
|
public string excel = "";
|
|
|
|
public string repositoryPath { get { return _repositoryPath; } }
|
|
|
|
/// <summary>
|
|
/// 가장먼저 시작해야 하는 스크립트
|
|
/// </summary>
|
|
public void Init()
|
|
{
|
|
restart:
|
|
isRestart = false;
|
|
Pull();
|
|
if (isRestart)
|
|
goto restart;
|
|
ChangeScript();
|
|
if (isRestart)
|
|
goto restart;
|
|
Push();
|
|
if (isRestart)
|
|
goto restart;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 엑셀 불러오기, 저장, 혹은 배포 까지 작업해야하는 함수
|
|
/// </summary>
|
|
public abstract void ChangeScript();
|
|
|
|
private void Pull()
|
|
{
|
|
if (!Directory.Exists(_repositoryPath))
|
|
{
|
|
Directory.CreateDirectory(_repositoryPath);
|
|
RepositorySet($"clone {STATICS.remoteUrl} {_repositoryPath}", null);
|
|
|
|
//main브렌치로 세팅
|
|
RepositorySet("branch -m main", _repositoryPath);
|
|
RepositorySet("branch --set-upstream-to=origin/main main", _repositoryPath);
|
|
}
|
|
|
|
// pull 명령어 실행
|
|
RepositorySet("pull", _repositoryPath);
|
|
}
|
|
|
|
private static void RepositorySet(string command, string workingDirectory)
|
|
{
|
|
ProcessStartInfo psi = new ProcessStartInfo
|
|
{
|
|
FileName = "git",
|
|
Arguments = command,
|
|
WorkingDirectory = workingDirectory,
|
|
RedirectStandardOutput = true,
|
|
RedirectStandardError = true,
|
|
UseShellExecute = false,
|
|
CreateNoWindow = true
|
|
};
|
|
|
|
using (Process process = new Process { StartInfo = psi })
|
|
{
|
|
process.Start();
|
|
process.WaitForExit();
|
|
|
|
// Git 명령 실행 결과 출력
|
|
Console.WriteLine(process.StandardOutput.ReadToEnd());
|
|
|
|
// 오류 메시지 출력
|
|
Console.WriteLine(process.StandardError.ReadToEnd());
|
|
}
|
|
}
|
|
|
|
private void Push()
|
|
{
|
|
if(excel == "")
|
|
{
|
|
return;
|
|
}
|
|
|
|
//json 저장
|
|
using (StreamWriter writer = new StreamWriter(repositoryPath + "\\excel.json"))
|
|
{
|
|
writer.Write(excel);
|
|
Console.WriteLine($"파일이 저장되었습니다 : {repositoryPath + "\\excel.json"}");
|
|
}
|
|
|
|
|
|
// 스테이징
|
|
RepositorySet("add .", repositoryPath);
|
|
|
|
// 커밋
|
|
RepositorySet($"commit -m \"update excel data\"", repositoryPath);
|
|
|
|
// 푸시
|
|
RepositorySet("push origin main", repositoryPath);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// 모든 파일리스트 반환
|
|
/// </summary>
|
|
/// <param name="directoryPath">검색할 폴더 경로</param>
|
|
/// <param name="extension">확장자</param>
|
|
/// <returns></returns>
|
|
public List<string> GetFiles(string directoryPath, string extension)
|
|
{
|
|
List<string> xlsxFileList = new List<string>();
|
|
|
|
try
|
|
{
|
|
string[] files = Directory.GetFiles(directoryPath);
|
|
|
|
foreach (string file in files)
|
|
{
|
|
if (Path.GetExtension(file).Equals(".xlsx", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
xlsxFileList.Add(file);
|
|
}
|
|
}
|
|
|
|
string[] subdirectories = Directory.GetDirectories(directoryPath);
|
|
foreach (string subdirectory in subdirectories)
|
|
{
|
|
//git시스템 파일은 뛰어넘기
|
|
if (subdirectory == directoryPath + "\\.git")
|
|
continue;
|
|
|
|
//제귀
|
|
xlsxFileList.AddRange(GetFiles(subdirectory, extension));
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
logger.Error(ex);
|
|
}
|
|
|
|
return xlsxFileList;
|
|
}
|
|
}
|
|
}
|