TEST(CGitAdminDir, IsAdminDirPath_BareRepo) { CAutoTempDir tmpDir; EXPECT_FALSE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir())); CAutoRepository repo = nullptr; ASSERT_TRUE(git_repository_init(repo.GetPointer(), CUnicodeUtils::GetUTF8(tmpDir.GetTempDir()), true) == 0); EXPECT_FALSE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir())); }
TEST(GitWCRevStatus, EmptyBareRepo) { CAutoTempDir tempdir; git_repository_init_options options = GIT_REPOSITORY_INIT_OPTIONS_INIT; options.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_BARE | GIT_REPOSITORY_INIT_NO_DOTGIT_DIR; CAutoRepository repo; ASSERT_EQ(0, git_repository_init_ext(repo.GetPointer(), CUnicodeUtils::GetUTF8(tempdir.GetTempDir()), &options)); GitWCRev_t GitStat; EXPECT_EQ(ERR_NOWC, GetStatus(tempdir.GetTempDir(), GitStat)); }
TEST(CGitAdminDir, HasAdminDir_bareRepo) { CAutoTempDir tmpDir; EXPECT_FALSE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir())); CAutoRepository repo = nullptr; ASSERT_TRUE(git_repository_init(repo.GetPointer(), CUnicodeUtils::GetUTF8(tmpDir.GetTempDir()), true) == 0); EXPECT_FALSE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir())); EXPECT_FALSE(GitAdminDir::IsBareRepo(tmpDir.GetTempDir() + _T("\\objects"))); }
TEST(CGitAdminDir, IsWorkingTreeOrBareRepo_normalRepo) { CAutoTempDir tmpDir; EXPECT_FALSE(GitAdminDir::IsWorkingTreeOrBareRepo(tmpDir.GetTempDir())); CAutoRepository repo = nullptr; ASSERT_TRUE(git_repository_init(repo.GetPointer(), CUnicodeUtils::GetUTF8(tmpDir.GetTempDir()), false) == 0); EXPECT_TRUE(GitAdminDir::IsWorkingTreeOrBareRepo(tmpDir.GetTempDir())); EXPECT_FALSE(GitAdminDir::IsWorkingTreeOrBareRepo(tmpDir.GetTempDir() + _T("\\.git"))); EXPECT_FALSE(GitAdminDir::IsWorkingTreeOrBareRepo(tmpDir.GetTempDir() + _T("\\.git\\objects"))); }
TEST(CGitAdminDir, HasAdminDir) { CAutoTempDir tmpDir; EXPECT_FALSE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir())); CString gitFile = tmpDir.GetTempDir() + L"\\.gitted"; EXPECT_TRUE(CStringUtils::WriteStringToTextFile((LPCTSTR)gitFile, L"something")); EXPECT_FALSE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir())); CAutoRepository repo = nullptr; ASSERT_TRUE(git_repository_init(repo.GetPointer(), CUnicodeUtils::GetUTF8(tmpDir.GetTempDir()), false) == 0); CString repoRoot; EXPECT_TRUE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir(), &repoRoot)); EXPECT_STREQ(tmpDir.GetTempDir(), repoRoot); EXPECT_FALSE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir() + _T("\\.git"), &repoRoot)); repoRoot.Empty(); EXPECT_TRUE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir() + _T("\\.gitmodules"), &repoRoot)); EXPECT_STREQ(tmpDir.GetTempDir(), repoRoot); repoRoot.Empty(); EXPECT_TRUE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir() + _T("\\something"), &repoRoot)); EXPECT_STREQ(tmpDir.GetTempDir(), repoRoot); ASSERT_TRUE(CreateDirectory(tmpDir.GetTempDir() + L"\\anotherdir", nullptr)); repoRoot.Empty(); EXPECT_TRUE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir() + _T("\\anotherdir"), &repoRoot)); EXPECT_STREQ(tmpDir.GetTempDir(), repoRoot); CAutoRepository subrepo = nullptr; ASSERT_TRUE(git_repository_init(subrepo.GetPointer(), CUnicodeUtils::GetUTF8(tmpDir.GetTempDir() + _T("\\anotherdir")), false) == 0); repoRoot.Empty(); EXPECT_TRUE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir() + _T("\\anotherdir"), &repoRoot)); EXPECT_STREQ(tmpDir.GetTempDir() + _T("\\anotherdir"), repoRoot); repoRoot.Empty(); EXPECT_TRUE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir() + _T("\\anotherdir"), true, &repoRoot)); EXPECT_STREQ(tmpDir.GetTempDir() + _T("\\anotherdir"), repoRoot); repoRoot.Empty(); EXPECT_TRUE(GitAdminDir::HasAdminDir(tmpDir.GetTempDir() + _T("\\anotherdir"), false, &repoRoot)); EXPECT_STREQ(tmpDir.GetTempDir(), repoRoot); }
bool CreateRepositoryCommand::Execute() { CString folder = this->orgCmdLinePath.GetWinPath(); if (folder.IsEmpty()) folder = g_Git.m_CurrentDir; if (folder.IsEmpty()) { GetCurrentDirectory(MAX_PATH, folder.GetBuffer(MAX_PATH)); folder.ReleaseBuffer(); } if (CheckSpecialFolder(folder)) { CString message; message.Format(IDS_WARN_GITINIT_SPECIALFOLDER, folder); if (CMessageBox::Show(hwndExplorer, message, _T("TortoiseGit"), 1, IDI_ERROR, CString(MAKEINTRESOURCE(IDS_ABORTBUTTON)), CString(MAKEINTRESOURCE(IDS_PROCEEDBUTTON))) == 1) return false; } CCreateRepoDlg dlg; dlg.m_folder = folder; if(dlg.DoModal() == IDOK) { CString message; message.Format(IDS_WARN_GITINIT_FOLDERNOTEMPTY, folder); if (dlg.m_bBare && PathIsDirectory(folder) && !PathIsDirectoryEmpty(folder) && CMessageBox::Show(hwndExplorer, message, _T("TortoiseGit"), 1, IDI_ERROR, CString(MAKEINTRESOURCE(IDS_ABORTBUTTON)), CString(MAKEINTRESOURCE(IDS_PROCEEDBUTTON))) == 1) { return false; } git_repository_init_options options = GIT_REPOSITORY_INIT_OPTIONS_INIT; options.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE; options.flags |= dlg.m_bBare ? GIT_REPOSITORY_INIT_BARE : 0; CAutoRepository repo; if (git_repository_init_ext(repo.GetPointer(), CUnicodeUtils::GetUTF8(folder), &options)) { CMessageBox::Show(hwndExplorer, CGit::GetLibGit2LastErr(_T("Could not initialize a new repository.")), _T("TortoiseGit"), MB_OK | MB_ICONERROR); return false; } if (!dlg.m_bBare) CShellUpdater::Instance().AddPathForUpdate(orgCmdLinePath); CString str; str.Format(IDS_PROC_REPOCREATED, folder); CMessageBox::Show(hwndExplorer, str, _T("TortoiseGit"), MB_OK | MB_ICONINFORMATION); return true; } return false; }
TEST_P(GitWCRevStatusCBasicGitWithEmptyRepositoryFixture, EmptyRepoStagedFile) { CString file = m_Dir.GetTempDir() + L"\\somefile.txt"; EXPECT_TRUE(CStringUtils::WriteStringToTextFile(file, L"something\n")); CAutoRepository repo; ASSERT_EQ(0, git_repository_open(repo.GetPointer(), CUnicodeUtils::GetUTF8(m_Dir.GetTempDir()))); CAutoIndex index; ASSERT_EQ(0, git_repository_index(index.GetPointer(), repo)); ASSERT_EQ(0, git_index_add_bypath(index, "somefile.txt")); ASSERT_EQ(0, git_index_write(index)); GitWCRev_t GitStat3; EXPECT_TRUE(CStringUtils::WriteStringToTextFile(file, L"something\n")); EXPECT_EQ(0, GetStatus(m_Dir.GetTempDir(), GitStat3)); EXPECT_TRUE(GitStat3.bIsGitItem); EXPECT_TRUE(GitStat3.bIsUnborn); EXPECT_STREQ("master", GitStat3.CurrentBranch.c_str()); EXPECT_FALSE(GitStat3.bHasSubmodule); EXPECT_FALSE(GitStat3.HasMods); EXPECT_TRUE(GitStat3.HasUnversioned); EXPECT_EQ(0u, GitStat3.NumCommits); EXPECT_FALSE(GitStat3.bHasSubmoduleMods); EXPECT_FALSE(GitStat3.bHasSubmoduleNewCommits); EXPECT_FALSE(GitStat3.bHasSubmoduleUnversioned); EXPECT_FALSE(GitStat3.bIsTagged); EXPECT_STREQ(GIT_REV_ZERO_C, GitStat3.HeadHashReadable); EXPECT_STREQ("", GitStat3.HeadAuthor.c_str()); GitWCRev_t GitStat4; EXPECT_EQ(0, GetStatus(file, GitStat4)); EXPECT_FALSE(GitStat4.bIsGitItem); EXPECT_TRUE(GitStat4.bIsUnborn); EXPECT_STREQ("master", GitStat4.CurrentBranch.c_str()); EXPECT_FALSE(GitStat4.bHasSubmodule); EXPECT_FALSE(GitStat4.HasMods); EXPECT_TRUE(GitStat4.HasUnversioned); EXPECT_EQ(0u, GitStat4.NumCommits); EXPECT_FALSE(GitStat4.bHasSubmoduleMods); EXPECT_FALSE(GitStat4.bHasSubmoduleNewCommits); EXPECT_FALSE(GitStat4.bHasSubmoduleUnversioned); EXPECT_FALSE(GitStat4.bIsTagged); EXPECT_STREQ(GIT_REV_ZERO_C, GitStat4.HeadHashReadable); EXPECT_STREQ("", GitStat4.HeadAuthor.c_str()); }
static bool GetSubmodulePathList(SubmodulePayload &payload) { CAutoRepository repo; if (repo.Open(payload.basePath)) { // Silence the warning message, submodule may not be initialized yet. return false; } if (git_submodule_foreach(repo, SubmoduleCallback, &payload)) { MessageBox(nullptr, CGit::GetLibGit2LastErr(_T("Could not get submodule list.")), _T("TortoiseGit"), MB_ICONERROR); return false; } return true; }
TEST(CGitAdminDir, GetAdminDirPath_BareRepo) { CAutoTempDir tmpDir; CString adminDir; EXPECT_FALSE(GitAdminDir::GetAdminDirPath(tmpDir.GetTempDir(), adminDir)); EXPECT_TRUE(adminDir.IsEmpty()); CAutoRepository repo = nullptr; ASSERT_TRUE(git_repository_init(repo.GetPointer(), CUnicodeUtils::GetUTF8(tmpDir.GetTempDir()), true) == 0); EXPECT_TRUE(GitAdminDir::GetAdminDirPath(tmpDir.GetTempDir(), adminDir)); EXPECT_STREQ(tmpDir.GetTempDir() + _T("\\"), adminDir); adminDir.Empty(); EXPECT_FALSE(GitAdminDir::GetAdminDirPath(tmpDir.GetTempDir() + L"\\objects", adminDir)); EXPECT_TRUE(adminDir.IsEmpty()); }
TEST(CGitAdminDir, IsAdminDirPath) { CAutoTempDir tmpDir; EXPECT_FALSE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir())); CAutoRepository repo = nullptr; ASSERT_TRUE(git_repository_init(repo.GetPointer(), CUnicodeUtils::GetUTF8(tmpDir.GetTempDir()), false) == 0); EXPECT_FALSE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir())); EXPECT_TRUE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir() + L"\\.git")); EXPECT_TRUE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir() + L"\\.git\\config")); EXPECT_TRUE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir() + L"\\.git\\objects")); EXPECT_FALSE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir() + L"\\.gitmodules")); ASSERT_TRUE(CreateDirectory(tmpDir.GetTempDir() + L"\\.gitted", nullptr)); EXPECT_FALSE(GitAdminDir::IsAdminDirPath(tmpDir.GetTempDir() + L"\\.gitted")); }
TEST(libgit2, TGitPatches) { CAutoTempDir tempdir; git_repository_init_options options = GIT_REPOSITORY_INIT_OPTIONS_INIT; options.flags = GIT_REPOSITORY_INIT_MKPATH | GIT_REPOSITORY_INIT_EXTERNAL_TEMPLATE; CAutoRepository repo; ASSERT_EQ(0, git_repository_init_ext(repo.GetPointer(), CUnicodeUtils::GetUTF8(tempdir.GetTempDir()), &options)); CAutoConfig config; ASSERT_EQ(0, git_repository_config(config.GetPointer(), repo)); EXPECT_EQ(0, git_config_set_string(config, "core.autocrlf", "true")); EXPECT_EQ(0, git_config_set_string(config, "core.safecrlf", "true")); CAutoRepository repo2(tempdir.GetTempDir()); ASSERT_TRUE(repo2.IsValid()); CAutoIndex index; ASSERT_EQ(0, git_repository_index(index.GetPointer(), repo2)); CString testFile = tempdir.GetTempDir() + L"\\safecrlf-failure.txt"; EXPECT_TRUE(CStringUtils::WriteStringToTextFile(testFile, L"crlf\r\ncrlf\r\n")); EXPECT_EQ(0, git_index_add_bypath(index, "safecrlf-failure.txt")); EXPECT_TRUE(CStringUtils::WriteStringToTextFile(testFile, L"lf\nlf\n")); EXPECT_EQ(-1, git_index_add_bypath(index, "safecrlf-failure.txt")); EXPECT_TRUE(CStringUtils::WriteStringToTextFile(testFile, L"crlf\r\ncr\rcrlf\r\n")); EXPECT_EQ(0, git_index_add_bypath(index, "safecrlf-failure.txt")); EXPECT_EQ(0, git_config_set_string(config, "core.autocrlf", "input")); CAutoRepository repo3(tempdir.GetTempDir()); ASSERT_TRUE(repo3.IsValid()); ASSERT_EQ(0, git_repository_index(index.GetPointer(), repo3)); EXPECT_TRUE(CStringUtils::WriteStringToTextFile(testFile, L"crlf\r\ncrlf\r\n")); EXPECT_EQ(-1, git_index_add_bypath(index, "safecrlf-failure.txt")); }