75 wxString
result = wxT(
"no hash" );
80 git_reference* head =
nullptr;
82 if( git_repository_head( &head, repo ) == 0 )
84 const git_oid* oid = git_reference_target( head );
88 char buf[GIT_OID_HEXSZ + 1];
89 size_t len = aShort ? 9 : GIT_OID_HEXSZ + 1;
90 git_oid_tostr( buf, len, oid );
91 result = wxString::FromUTF8( buf );
94 git_reference_free( head );
97 git_repository_free( repo );
105 const wxString& aCanonicalWorkDir )
108 return aCanonicalWorkDir;
110 if( aUserProjectPath.IsEmpty() || aCanonicalWorkDir.IsEmpty() )
111 return aCanonicalWorkDir;
113 char resolvedPath[PATH_MAX];
115 if( realpath( aUserProjectPath.mb_str(), resolvedPath ) ==
nullptr )
116 return aCanonicalWorkDir;
118 wxString canonicalUserPath = wxString::FromUTF8( resolvedPath );
120 if( !canonicalUserPath.EndsWith( wxFileName::GetPathSeparator() ) )
121 canonicalUserPath += wxFileName::GetPathSeparator();
123 wxString canonicalWorkDirNorm = aCanonicalWorkDir;
125 if( !canonicalWorkDirNorm.EndsWith( wxFileName::GetPathSeparator() ) )
126 canonicalWorkDirNorm += wxFileName::GetPathSeparator();
129 if( canonicalUserPath.StartsWith( canonicalWorkDirNorm ) )
131 return aUserProjectPath.EndsWith( wxFileName::GetPathSeparator() )
133 : aUserProjectPath + wxFileName::GetPathSeparator();
137 wxFileName userFn( aUserProjectPath );
138 wxFileName workDirFn( aCanonicalWorkDir );
139 wxArrayString workDirParts = workDirFn.GetDirs();
140 size_t workDirDepth = workDirParts.GetCount();
142 wxFileName canonicalUserFn( canonicalUserPath );
143 wxArrayString canonicalUserParts = canonicalUserFn.GetDirs();
145 if( canonicalUserParts.GetCount() < workDirDepth )
146 return aCanonicalWorkDir;
148 wxArrayString canonicalWorkDirParts = workDirFn.GetDirs();
150 for(
size_t i = 0; i < workDirDepth; ++i )
152 if( canonicalUserParts[i] != canonicalWorkDirParts[i] )
153 return aCanonicalWorkDir;
156 wxArrayString userParts = userFn.GetDirs();
158 if( userParts.GetCount() < workDirDepth )
159 return aCanonicalWorkDir;
161 wxString
result = userFn.GetVolume();
164 result += wxFileName::GetVolumeSeparator();
166 result += wxFileName::GetPathSeparator();
168 for(
size_t i = 0; i < workDirDepth; ++i )
171 result += wxFileName::GetPathSeparator();
static bool RemoveVCS(git_repository *&aRepo, const wxString &aProjectPath=wxEmptyString, bool aRemoveGitDir=false, wxString *aErrors=nullptr)
Remove version control from a directory by freeing the repository and optionally removing the ....
wxString result
Test unit parsing edge cases and error handling.