本文整理汇总了C++中CGit::Run方法的典型用法代码示例。如果您正苦于以下问题:C++ CGit::Run方法的具体用法?C++ CGit::Run怎么用?C++ CGit::Run使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CGit
的用法示例。
在下文中一共展示了CGit::Run方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Revert
int CGit::Revert(CTGitPath &path,bool keep)
{
CString cmd, out;
if(path.m_Action & CTGitPath::LOGACTIONS_ADDED)
{ //To init git repository, there are not HEAD, so we can use git reset command
cmd.Format(_T("git.exe rm --cache -- \"%s\""),path.GetGitPathString());
if(g_Git.Run(cmd,&out,CP_OEMCP))
return -1;
}
else if(path.m_Action & CTGitPath::LOGACTIONS_REPLACED )
{
cmd.Format(_T("git.exe mv \"%s\" \"%s\""),path.GetGitPathString(),path.GetGitOldPathString());
if(g_Git.Run(cmd,&out,CP_OEMCP))
return -1;
cmd.Format(_T("git.exe checkout -f -- \"%s\""),path.GetGitOldPathString());
if(g_Git.Run(cmd,&out,CP_OEMCP))
return -1;
}
else
{
cmd.Format(_T("git.exe checkout -f -- \"%s\""),path.GetGitPathString());
if(g_Git.Run(cmd,&out,CP_OEMCP))
return -1;
}
return 0;
}
示例2: SubmoduleDiffNull
int CGitDiff::SubmoduleDiffNull(const CTGitPath * pPath, const git_revnum_t &rev1)
{
CString oldhash = GIT_REV_ZERO;
CString oldsub ;
CString newsub;
CString newhash;
CString cmd;
if (rev1 != GIT_REV_ZERO)
cmd.Format(_T("git.exe ls-tree \"%s\" -- \"%s\""), rev1, pPath->GetGitPathString());
else
cmd.Format(_T("git.exe ls-files -s -- \"%s\""), pPath->GetGitPathString());
CString output, err;
if (g_Git.Run(cmd, &output, &err, CP_UTF8))
{
CMessageBox::Show(NULL, output + L"\n" + err, _T("TortoiseGit"), MB_OK|MB_ICONERROR);
return -1;
}
int start=0;
start=output.Find(_T(' '),start);
if(start>0)
{
if (rev1 != GIT_REV_ZERO) // in ls-files the hash is in the second column; in ls-tree it's in the third one
start = output.Find(_T(' '), start + 1);
if(start>0)
newhash=output.Mid(start+1, 40);
CGit subgit;
subgit.m_CurrentDir=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString();
int encode=CAppUtils::GetLogOutputEncode(&subgit);
cmd.Format(_T("git.exe log -n1 --pretty=format:\"%%s\" %s --"), newhash);
bool toOK = !subgit.Run(cmd,&newsub,encode);
bool dirty = false;
if (rev1 == GIT_REV_ZERO)
{
CString dirtyList;
subgit.Run(_T("git.exe status --porcelain"), &dirtyList, encode);
dirty = !dirtyList.IsEmpty();
}
CSubmoduleDiffDlg submoduleDiffDlg;
submoduleDiffDlg.SetDiff(pPath->GetWinPath(), false, oldhash, oldsub, true, newhash, newsub, toOK, dirty, CSubmoduleDiffDlg::NewSubmodule);
submoduleDiffDlg.DoModal();
if (submoduleDiffDlg.IsRefresh())
return 1;
return 0;
}
if (rev1 != GIT_REV_ZERO)
CMessageBox::Show(NULL, _T("ls-tree output format error"), _T("TortoiseGit"), MB_OK | MB_ICONERROR);
else
CMessageBox::Show(NULL, _T("ls-files output format error"), _T("TortoiseGit"), MB_OK | MB_ICONERROR);
return -1;
}
示例3: GetRemoteList
int CGit::GetRemoteList(STRING_VECTOR &list)
{
int ret;
CString cmd,output;
cmd=_T("git.exe config --get-regexp remote.*.url");
ret=g_Git.Run(cmd,&output,CP_UTF8);
if(!ret)
{
int pos=0;
CString one;
while( pos>=0 )
{
one=output.Tokenize(_T("\n"),pos);
int start=one.Find(_T("."),0);
if(start>0)
{
CString url;
url=one.Right(one.GetLength()-start-1);
one=url;
one=one.Left(one.Find(_T("."),0));
list.push_back(one);
}
}
}
return ret;
}
示例4: GetMapHashToFriendName
int CGit::GetMapHashToFriendName(MAP_HASH_NAME &map)
{
int ret;
CString cmd,output;
cmd=_T("git show-ref -d");
ret=g_Git.Run(cmd,&output,CP_UTF8);
if(!ret)
{
int pos=0;
CString one;
while( pos>=0 )
{
one=output.Tokenize(_T("\n"),pos);
int start=one.Find(_T(" "),0);
if(start>0)
{
CString name;
name=one.Right(one.GetLength()-start-1);
CString hash;
hash=one.Left(start);
map[hash].push_back(name);
}
}
}
return ret;
}
示例5: GetBranchList
int CGit::GetBranchList(STRING_VECTOR &list,int *current,BRANCH_TYPE type)
{
int ret;
CString cmd,output;
cmd=_T("git.exe branch");
if(type==(BRANCH_LOCAL|BRANCH_REMOTE))
cmd+=_T(" -a");
else if(type==BRANCH_REMOTE)
cmd+=_T(" -r");
int i=0;
ret=g_Git.Run(cmd,&output,CP_UTF8);
if(!ret)
{
int pos=0;
CString one;
while( pos>=0 )
{
one=output.Tokenize(_T("\n"),pos);
list.push_back(one.Right(one.GetLength()-2));
if(one[0] == _T('*'))
if(current)
*current=i;
i++;
}
}
return ret;
}
示例6: FillUnRev
int CTGitPathList::FillUnRev(unsigned int action, CTGitPathList *list, CString *err)
{
this->Clear();
CTGitPath path;
int count;
if(list==NULL)
count=1;
else
count=list->GetCount();
for (int i = 0; i < count; ++i)
{
CString cmd;
int pos = 0;
CString ignored;
if(action & CTGitPath::LOGACTIONS_IGNORE)
ignored= _T(" -i");
if(list==NULL)
{
cmd=_T("git.exe ls-files --exclude-standard --full-name --others -z");
cmd+=ignored;
}
else
{ cmd.Format(_T("git.exe ls-files --exclude-standard --full-name --others -z%s -- \"%s\""),
(LPCTSTR)ignored,
(*list)[i].GetWinPath());
}
BYTE_VECTOR out, errb;
out.clear();
if (g_Git.Run(cmd, &out, &errb))
{
if (err != nullptr)
CGit::StringAppend(err, &errb[0], CP_UTF8, (int)errb.size());
return -1;
}
pos=0;
CString one;
while (pos >= 0 && pos < (int)out.size())
{
one.Empty();
CGit::StringAppend(&one, &out[pos], CP_UTF8);
if(!one.IsEmpty())
{
//SetFromGit will clear all status
path.SetFromGit(one);
path.m_Action=action;
AddPath(path);
}
pos=out.findNextString(pos);
}
}
return 0;
}
示例7: Execute
bool CreateRepositoryCommand::Execute()
{
CString folder = this->orgCmdLinePath.GetWinPath();
CCreateRepoDlg dlg;
dlg.m_folder = folder;
if(dlg.DoModal() == IDOK)
{
CString message;
message.Format(IDS_WARN_GITINIT_FOLDERNOTEMPTY, folder);
if (!PathIsDirectoryEmpty(folder) && CMessageBox::Show(hwndExplorer, message, _T("TortoiseGit"), 1, IDI_ERROR, CString(MAKEINTRESOURCE(IDS_ABORTBUTTON)), CString(MAKEINTRESOURCE(IDS_PROCEEDBUTTON))) == 1)
{
return false;
}
CGit git;
git.m_CurrentDir = this->orgCmdLinePath.GetWinPath();
CString output;
int ret;
if (dlg.m_bBare)
ret = git.Run(_T("git.exe init-db --bare"), &output, CP_UTF8);
else
ret = git.Run(_T("git.exe init-db"), &output, CP_UTF8);
if (output.IsEmpty()) output = _T("git.Run() had no output");
if (ret)
{
CMessageBox::Show(hwndExplorer, output, _T("TortoiseGit"), MB_ICONERROR);
return false;
}
else
{
if (!dlg.m_bBare)
CShellUpdater::Instance().AddPathForUpdate(orgCmdLinePath);
CMessageBox::Show(hwndExplorer, output, _T("TortoiseGit"), MB_OK | MB_ICONINFORMATION);
}
return true;
}
return false;
}
示例8: IsInitRepos
BOOL CGit::IsInitRepos()
{
CString cmdout;
cmdout.Empty();
if(g_Git.Run(_T("git.exe rev-parse --revs-only HEAD"),&cmdout,CP_UTF8))
{
// CMessageBox::Show(NULL,cmdout,_T("TortoiseGit"),MB_OK);
return TRUE;
}
if(cmdout.IsEmpty())
return TRUE;
return FALSE;
}
示例9: CheckCleanWorkTree
BOOL CGit::CheckCleanWorkTree()
{
CString out;
CString cmd;
cmd=_T("git.exe rev-parse --verify HEAD");
if(g_Git.Run(cmd,&out,CP_UTF8))
return FALSE;
cmd=_T("git.exe update-index --ignore-submodules --refresh");
if(g_Git.Run(cmd,&out,CP_UTF8))
return FALSE;
cmd=_T("git.exe diff-files --quiet --ignore-submodules");
if(g_Git.Run(cmd,&out,CP_UTF8))
return FALSE;
cmd=_T("git diff-index --cached --quiet HEAD --ignore-submodules");
if(g_Git.Run(cmd,&out,CP_UTF8))
return FALSE;
return TRUE;
}
示例10: ListConflictFile
int CGit::ListConflictFile(CTGitPathList &list,CTGitPath *path)
{
BYTE_VECTOR vector;
CString cmd;
if(path)
cmd.Format(_T("git.exe ls-files -u -t -z -- \"%s\""),path->GetGitPathString());
else
cmd=_T("git.exe ls-files -u -t -z");
if(g_Git.Run(cmd,&vector))
{
return -1;
}
list.ParserFromLsFile(vector);
return 0;
}
示例11: GetTagList
int CGit::GetTagList(STRING_VECTOR &list)
{
int ret;
CString cmd,output;
cmd=_T("git.exe tag -l");
int i=0;
ret=g_Git.Run(cmd,&output,CP_UTF8);
if(!ret)
{
int pos=0;
CString one;
while( pos>=0 )
{
i++;
one=output.Tokenize(_T("\n"),pos);
list.push_back(one);
}
}
return ret;
}
示例12: SubmoduleDiffNull
int CGitDiff::SubmoduleDiffNull(CTGitPath *pPath, git_revnum_t &/*rev1*/)
{
CString oldhash = GIT_REV_ZERO;
CString oldsub ;
CString newsub;
CString newhash;
CString cmd;
cmd.Format(_T("git.exe ls-tree HEAD -- \"%s\""), pPath->GetGitPathString());
CString output, err;
if(g_Git.Run(cmd, &output, &err, CP_ACP))
{
CMessageBox::Show(NULL, output + L"\n" + err, _T("TortoiseGit"), MB_OK|MB_ICONERROR);
return -1;
}
int start=0;
start=output.Find(_T(' '),start);
if(start>0)
{
start=output.Find(_T(' '),start+1);
if(start>0)
newhash=output.Mid(start+1, 40);
CGit subgit;
subgit.m_CurrentDir=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString();
int encode=CAppUtils::GetLogOutputEncode(&subgit);
cmd.Format(_T("git.exe log -n1 --pretty=format:\"%%s\" %s"),newhash);
subgit.Run(cmd,&newsub,encode);
CSubmoduleDiffDlg submoduleDiffDlg;
submoduleDiffDlg.SetDiff(pPath->GetWinPath(), false, oldhash, oldsub, newhash, newsub);
submoduleDiffDlg.DoModal();
return 0;
}
CMessageBox::Show(NULL,_T("ls-tree output format error"),_T("TortoiseGit"),MB_OK|MB_ICONERROR);
return -1;
}
示例13: GetCurrentBranch
CString CGit::GetCurrentBranch(void)
{
CString output;
//Run(_T("git.exe branch"),&branch);
int ret=g_Git.Run(_T("git.exe branch"),&output,CP_UTF8);
if(!ret)
{
int pos=0;
CString one;
while( pos>=0 )
{
//i++;
one=output.Tokenize(_T("\n"),pos);
//list.push_back(one.Right(one.GetLength()-2));
if(one[0] == _T('*'))
return one.Right(one.GetLength()-2);
}
}
return CString("");
}
示例14: SubmoduleDiff
int CGitDiff::SubmoduleDiff(const CTGitPath * pPath, const CTGitPath * /*pPath2*/, const git_revnum_t &rev1, const git_revnum_t &rev2, bool /*blame*/, bool /*unified*/)
{
CString oldhash;
CString newhash;
bool dirty = false;
CString cmd;
bool isWorkingCopy = false;
if( rev2 == GIT_REV_ZERO || rev1 == GIT_REV_ZERO )
{
oldhash = GIT_REV_ZERO;
newhash = GIT_REV_ZERO;
CString rev;
if( rev2 != GIT_REV_ZERO )
rev = rev2;
if( rev1 != GIT_REV_ZERO )
rev = rev1;
isWorkingCopy = true;
cmd.Format(_T("git.exe diff %s -- \"%s\""),
rev,pPath->GetGitPathString());
CString output, err;
if (g_Git.Run(cmd, &output, &err, CP_UTF8))
{
CMessageBox::Show(NULL, output + L"\n" + err, _T("TortoiseGit"), MB_OK|MB_ICONERROR);
return -1;
}
if (output.IsEmpty())
{
output.Empty();
err.Empty();
// also compare against index
cmd.Format(_T("git.exe diff -- \"%s\""), pPath->GetGitPathString());
if (g_Git.Run(cmd, &output, &err, CP_UTF8))
{
CMessageBox::Show(NULL, output + _T("\n") + err, _T("TortoiseGit"), MB_OK | MB_ICONERROR);
return -1;
}
if (output.IsEmpty())
{
CMessageBox::Show(NULL, CString(MAKEINTRESOURCE(IDS_ERR_EMPTYDIFF)), _T("TortoiseGit"), MB_OK | MB_ICONERROR);
return -1;
}
else if (CMessageBox::Show(NULL, CString(MAKEINTRESOURCE(IDS_SUBMODULE_EMPTYDIFF)), _T("TortoiseGit"), 1, IDI_QUESTION, CString(MAKEINTRESOURCE(IDS_MSGBOX_YES)), CString(MAKEINTRESOURCE(IDS_MSGBOX_NO))) == 1)
{
CString sCmd;
sCmd.Format(_T("/command:subupdate /bkpath:\"%s\""), g_Git.m_CurrentDir);
CAppUtils::RunTortoiseGitProc(sCmd);
}
return -1;
}
int start =0;
int oldstart = output.Find(_T("-Subproject commit"),start);
if(oldstart<0)
{
CMessageBox::Show(NULL,_T("Subproject Diff Format error") ,_T("TortoiseGit"),MB_OK|MB_ICONERROR);
return -1;
}
oldhash = output.Mid(oldstart+ CString(_T("-Subproject commit")).GetLength()+1,40);
start = 0;
int newstart = output.Find(_T("+Subproject commit"),start);
if(oldstart<0)
{
CMessageBox::Show(NULL,_T("Subproject Diff Format error") ,_T("TortoiseGit"),MB_OK|MB_ICONERROR);
return -1;
}
newhash = output.Mid(newstart+ CString(_T("+Subproject commit")).GetLength()+1,40);
dirty = output.Mid(newstart + CString(_T("+Subproject commit")).GetLength() + 41) == _T("-dirty\n");
}
else
{
cmd.Format(_T("git.exe diff-tree -r -z %s %s -- \"%s\""),
rev2,rev1,pPath->GetGitPathString());
BYTE_VECTOR bytes, errBytes;
if(g_Git.Run(cmd, &bytes, &errBytes))
{
CString err;
g_Git.StringAppend(&err, &errBytes[0], CP_UTF8);
CMessageBox::Show(NULL,err,_T("TortoiseGit"),MB_OK|MB_ICONERROR);
return -1;
}
g_Git.StringAppend(&oldhash, &bytes[15], CP_UTF8, 40);
g_Git.StringAppend(&newhash, &bytes[15+41], CP_UTF8, 40);
}
CString oldsub;
CString newsub;
bool oldOK = false, newOK = false;
CGit subgit;
subgit.m_CurrentDir=g_Git.m_CurrentDir+_T("\\")+pPath->GetWinPathString();
CSubmoduleDiffDlg::ChangeType changeType = CSubmoduleDiffDlg::Unknown;
//.........这里部分代码省略.........
示例15: GetSubmoduleChangeType
void CGitDiff::GetSubmoduleChangeType(CGit& subgit, const CString& oldhash, const CString& newhash, bool& oldOK, bool& newOK, ChangeType& changeType, CString& oldsub, CString& newsub)
{
CString cmd;
int encode = CAppUtils::GetLogOutputEncode(&subgit);
int oldTime = 0, newTime = 0;
if (oldhash != GIT_REV_ZERO)
{
CString cmdout, cmderr;
cmd.Format(_T("git.exe log -n1 --pretty=format:\"%%ct %%s\" %s --"), (LPCTSTR)oldhash);
oldOK = !subgit.Run(cmd, &cmdout, &cmderr, encode);
if (oldOK)
{
int pos = cmdout.Find(_T(" "));
oldTime = _ttoi(cmdout.Left(pos));
oldsub = cmdout.Mid(pos + 1);
}
else
oldsub = cmderr;
}
if (newhash != GIT_REV_ZERO)
{
CString cmdout, cmderr;
cmd.Format(_T("git.exe log -n1 --pretty=format:\"%%ct %%s\" %s --"), (LPCTSTR)newhash);
newOK = !subgit.Run(cmd, &cmdout, &cmderr, encode);
if (newOK)
{
int pos = cmdout.Find(_T(" "));
newTime = _ttoi(cmdout.Left(pos));
newsub = cmdout.Mid(pos + 1);
}
else
newsub = cmderr;
}
if (oldhash == GIT_REV_ZERO)
{
oldOK = true;
changeType = NewSubmodule;
}
else if (newhash == GIT_REV_ZERO)
{
newOK = true;
changeType = DeleteSubmodule;
}
else if (oldhash != newhash)
{
bool ffNewer = false, ffOlder = false;
ffNewer = subgit.IsFastForward(oldhash, newhash);
if (!ffNewer)
{
ffOlder = subgit.IsFastForward(newhash, oldhash);
if (!ffOlder)
{
if (newTime > oldTime)
changeType = NewerTime;
else if (newTime < oldTime)
changeType = OlderTime;
else
changeType = SameTime;
}
else
changeType = Rewind;
}
else
changeType = FastForward;
}
else if (oldhash == newhash)
changeType = Identical;
if (!oldOK || !newOK)
changeType = Unknown;
}