void CSettingGitCredential::OnBnClickedButtonRemove() { int index = m_ctrlUrlList.GetCurSel(); if (index >= 0) { CString str; m_ctrlUrlList.GetText(index, str); CString msg; msg.Format(IDS_WARN_REMOVE, (LPCTSTR)str); if (CMessageBox::Show(GetSafeHwnd(), msg, L"TortoiseGit", MB_YESNO | MB_ICONQUESTION) == IDYES) { CAutoConfig config(true); int pos = str.Find(L':'); CString prefix = pos >= 0 ? str.Left(pos) : str; CString url = pos >= 0 ? str.Mid(pos + 1) : L""; CONFIG_TYPE configLevel = CONFIG_LOCAL; switch (prefix[0]) { case L'L': { configLevel = CONFIG_LOCAL; git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitLocalConfig()), GIT_CONFIG_LEVEL_LOCAL, FALSE); break; } case L'G': case L'X': { configLevel = CONFIG_GLOBAL; git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalConfig()), GIT_CONFIG_LEVEL_GLOBAL, FALSE); git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitGlobalXDGConfig()), GIT_CONFIG_LEVEL_XDG, FALSE); break; } case L'P': case L'S': { if (!CAppUtils::IsAdminLogin()) { RunUAC(); EndDialog(0); return; } configLevel = CONFIG_SYSTEM; git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitSystemConfig()), GIT_CONFIG_LEVEL_SYSTEM, FALSE); if (!g_Git.ms_bCygwinGit && !g_Git.ms_bMsys2Git) git_config_add_file_ondisk(config, CGit::GetGitPathStringA(g_Git.GetGitProgramDataConfig()), GIT_CONFIG_LEVEL_PROGRAMDATA, FALSE); break; } } STRING_VECTOR list; CStringA urlA = CUnicodeUtils::GetUTF8(url); CStringA pattern = urlA.IsEmpty() ? "^credential\\.[^.]+$" : ("credential\\." + RegexEscape(urlA) + "\\..*"); git_config_foreach_match(config, pattern, GetCredentialEntryCallback, &list); for (size_t i = 0; i < list.size(); ++i) g_Git.UnsetConfigValue(list[i], configLevel); m_ctrlUrlList.DeleteString(index); OnLbnSelchangeListUrl(); } } }
void CSettingGitCredential::OnBnClickedButtonRemove() { int index = m_ctrlUrlList.GetCurSel(); if (index >= 0) { CString str; m_ctrlUrlList.GetText(index, str); CString msg; msg.Format(IDS_GITCREDENTIAL_DELETEHELPER, str); if (CMessageBox::Show(NULL, msg, _T("TortoiseGit"), MB_YESNO | MB_ICONQUESTION) == IDYES) { git_config * config; git_config_new(&config); int pos = str.Find(_T(':')); CString prefix = pos >= 0 ? str.Left(pos) : str; CString url = pos >= 0 ? str.Mid(pos + 1) : _T(""); CONFIG_TYPE configLevel = CONFIG_LOCAL; switch (prefix[0]) { case _T('L'): { configLevel = CONFIG_LOCAL; CStringA projectConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitLocalConfig()); git_config_add_file_ondisk(config, projectConfigA.GetBuffer(), GIT_CONFIG_LEVEL_LOCAL, FALSE); projectConfigA.ReleaseBuffer(); break; } case _T('G'): case _T('X'): { configLevel = CONFIG_GLOBAL; CStringA globalConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitGlobalConfig()); git_config_add_file_ondisk(config, globalConfigA.GetBuffer(), GIT_CONFIG_LEVEL_GLOBAL, FALSE); globalConfigA.ReleaseBuffer(); CStringA globalXDGConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitGlobalXDGConfig()); git_config_add_file_ondisk(config, globalXDGConfigA.GetBuffer(), GIT_CONFIG_LEVEL_XDG, FALSE); globalXDGConfigA.ReleaseBuffer(); break; } case _T('S'): { if (!CAppUtils::IsAdminLogin()) { RunUAC(); git_config_free(config); EndDialog(0); return; } configLevel = CONFIG_SYSTEM; CStringA systemConfigA = CUnicodeUtils::GetUTF8(g_Git.GetGitSystemConfig()); git_config_add_file_ondisk(config, systemConfigA.GetBuffer(), GIT_CONFIG_LEVEL_SYSTEM, FALSE); systemConfigA.ReleaseBuffer(); break; } } STRING_VECTOR list; CStringA urlA = CUnicodeUtils::GetUTF8(url); CStringA pattern = urlA.IsEmpty() ? "^credential\\.[^.]+$" : ("credential\\." + RegexEscape(urlA) + "\\..*"); git_config_foreach_match(config, pattern, GetCredentialEntryCallback, &list); git_config_free(config); for (size_t i = 0; i < list.size(); ++i) g_Git.UnsetConfigValue(list[i], configLevel, CP_UTF8); m_ctrlUrlList.DeleteString(index); OnLbnSelchangeListUrl(); } } }