60 wxString
result = wxT(
"no hash" );
65 git_reference* head =
nullptr;
67 if( git_repository_head( &head, repo ) == 0 )
69 const git_oid* oid = git_reference_target( head );
73 char buf[GIT_OID_HEXSZ + 1];
74 size_t len = aShort ? 9 : GIT_OID_HEXSZ + 1;
75 git_oid_tostr( buf, len, oid );
76 result = wxString::FromUTF8( buf );
79 git_reference_free( head );
82 git_repository_free( repo );
90 const wxString& aCanonicalWorkDir )
93 return aCanonicalWorkDir;
95 if( aUserProjectPath.IsEmpty() || aCanonicalWorkDir.IsEmpty() )
96 return aCanonicalWorkDir;
98 char resolvedPath[PATH_MAX];
100 if( realpath( aUserProjectPath.mb_str(), resolvedPath ) ==
nullptr )
101 return aCanonicalWorkDir;
103 wxString canonicalUserPath = wxString::FromUTF8( resolvedPath );
105 if( !canonicalUserPath.EndsWith( wxFileName::GetPathSeparator() ) )
106 canonicalUserPath += wxFileName::GetPathSeparator();
108 wxString canonicalWorkDirNorm = aCanonicalWorkDir;
110 if( !canonicalWorkDirNorm.EndsWith( wxFileName::GetPathSeparator() ) )
111 canonicalWorkDirNorm += wxFileName::GetPathSeparator();
114 if( canonicalUserPath.StartsWith( canonicalWorkDirNorm ) )
116 return aUserProjectPath.EndsWith( wxFileName::GetPathSeparator() )
118 : aUserProjectPath + wxFileName::GetPathSeparator();
122 wxFileName userFn( aUserProjectPath );
123 wxFileName workDirFn( aCanonicalWorkDir );
124 wxArrayString workDirParts = workDirFn.GetDirs();
125 size_t workDirDepth = workDirParts.GetCount();
127 wxFileName canonicalUserFn( canonicalUserPath );
128 wxArrayString canonicalUserParts = canonicalUserFn.GetDirs();
130 if( canonicalUserParts.GetCount() < workDirDepth )
131 return aCanonicalWorkDir;
133 wxArrayString canonicalWorkDirParts = workDirFn.GetDirs();
135 for(
size_t i = 0; i < workDirDepth; ++i )
137 if( canonicalUserParts[i] != canonicalWorkDirParts[i] )
138 return aCanonicalWorkDir;
141 wxArrayString userParts = userFn.GetDirs();
143 if( userParts.GetCount() < workDirDepth )
144 return aCanonicalWorkDir;
146 wxString
result = userFn.GetVolume();
149 result += wxFileName::GetVolumeSeparator();
151 result += wxFileName::GetPathSeparator();
153 for(
size_t i = 0; i < workDirDepth; ++i )
156 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.