57 wxString
result = wxT(
"no hash" );
62 git_reference* head =
nullptr;
64 if( git_repository_head( &head, repo ) == 0 )
66 const git_oid* oid = git_reference_target( head );
70 char buf[GIT_OID_HEXSZ + 1];
71 size_t len = aShort ? 9 : GIT_OID_HEXSZ + 1;
72 git_oid_tostr( buf, len, oid );
73 result = wxString::FromUTF8( buf );
76 git_reference_free( head );
79 git_repository_free( repo );
87 const wxString& aCanonicalWorkDir )
90 return aCanonicalWorkDir;
92 if( aUserProjectPath.IsEmpty() || aCanonicalWorkDir.IsEmpty() )
93 return aCanonicalWorkDir;
95 char resolvedPath[PATH_MAX];
97 if( realpath( aUserProjectPath.mb_str(), resolvedPath ) ==
nullptr )
98 return aCanonicalWorkDir;
100 wxString canonicalUserPath = wxString::FromUTF8( resolvedPath );
102 if( !canonicalUserPath.EndsWith( wxFileName::GetPathSeparator() ) )
103 canonicalUserPath += wxFileName::GetPathSeparator();
105 wxString canonicalWorkDirNorm = aCanonicalWorkDir;
107 if( !canonicalWorkDirNorm.EndsWith( wxFileName::GetPathSeparator() ) )
108 canonicalWorkDirNorm += wxFileName::GetPathSeparator();
111 if( canonicalUserPath.StartsWith( canonicalWorkDirNorm ) )
113 return aUserProjectPath.EndsWith( wxFileName::GetPathSeparator() )
115 : aUserProjectPath + wxFileName::GetPathSeparator();
119 wxFileName userFn( aUserProjectPath );
120 wxFileName workDirFn( aCanonicalWorkDir );
121 wxArrayString workDirParts = workDirFn.GetDirs();
122 size_t workDirDepth = workDirParts.GetCount();
124 wxFileName canonicalUserFn( canonicalUserPath );
125 wxArrayString canonicalUserParts = canonicalUserFn.GetDirs();
127 if( canonicalUserParts.GetCount() < workDirDepth )
128 return aCanonicalWorkDir;
130 wxArrayString canonicalWorkDirParts = workDirFn.GetDirs();
132 for(
size_t i = 0; i < workDirDepth; ++i )
134 if( canonicalUserParts[i] != canonicalWorkDirParts[i] )
135 return aCanonicalWorkDir;
138 wxArrayString userParts = userFn.GetDirs();
140 if( userParts.GetCount() < workDirDepth )
141 return aCanonicalWorkDir;
143 wxString
result = userFn.GetVolume();
146 result += wxFileName::GetVolumeSeparator();
148 result += wxFileName::GetPathSeparator();
150 for(
size_t i = 0; i < workDirDepth; ++i )
153 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.