public void SetStatus(VersionInfo versionInfo, bool notify = true) { try { fileLock.EnterWriteLock(); if (!versionInfo.IsInitialized) { versionInfo.Init(repo); } VersionInfo vi; if (fileStatus.TryGetValue(versionInfo.LocalPath, out vi) && vi.Equals(versionInfo)) { vi.RequiresRefresh = false; return; } fileStatus [versionInfo.LocalPath] = versionInfo; } finally { fileLock.ExitWriteLock(); } if (notify) { VersionControlService.NotifyFileStatusChanged(new FileUpdateEventArgs(repo, versionInfo.LocalPath, versionInfo.IsDirectory)); } }
// Returns the versioning status of a file or directory public VersionInfo GetVersionInfo(FilePath localPath, bool getRemoteStatus) { VersionInfo vi = OnGetVersionInfo(new FilePath[] { localPath }, getRemoteStatus).Single(); vi.Init(this); return(vi); }
// Returns the versioning status of a file or directory public VersionInfo GetVersionInfo(FilePath localPath, bool getRemoteStatus) { VersionInfo vi = OnGetVersionInfo(new FilePath[] { localPath }, getRemoteStatus).FirstOrDefault(); if (vi != null) { vi.Init(this); } return(vi); }
// Returns the versioning status of a file or directory public VersionInfo GetVersionInfo(FilePath localPath, bool getRemoteStatus) { try { VersionInfo vi = OnGetVersionInfo(new FilePath[] { localPath }, getRemoteStatus).Single(); vi.Init(this); return(vi); } catch { Console.WriteLine("pp:"); VersionInfo vi = OnGetVersionInfo(new FilePath[] { localPath }, getRemoteStatus).Single(); throw; } }
// Returns the versioning status of a file or directory public VersionInfo GetVersionInfo(FilePath localPath, bool getRemoteStatus) { VersionInfo[] infos = OnGetVersionInfo(new FilePath[] { localPath }, getRemoteStatus).ToArray(); if (infos.Length != 1) { var names = infos; LoggingService.LogError("VersionControl returned {0} items for {1}", infos.Length, localPath); LoggingService.LogError("The infos were: {0}", string.Join(" ::: ", infos.Select(i => i.LocalPath))); } VersionInfo vi = infos.Single(); vi.Init(this); return(vi); }
public void SetStatus (VersionInfo versionInfo, bool notify = true) { lock (fileStatus) { VersionInfo vi; if (fileStatus.TryGetValue (versionInfo.LocalPath, out vi) && vi.Equals (versionInfo)) { vi.RequiresRefresh = false; return; } versionInfo.Init (repo); fileStatus [versionInfo.LocalPath] = versionInfo; } if (notify) VersionControlService.NotifyFileStatusChanged (new FileUpdateEventArgs (repo, versionInfo.LocalPath, versionInfo.IsDirectory)); }
public void SetStatus(VersionInfo versionInfo, bool notify = true) { lock (fileStatus) { VersionInfo vi; if (fileStatus.TryGetValue(versionInfo.LocalPath, out vi) && vi.Equals(versionInfo)) { vi.RequiresRefresh = false; return; } versionInfo.Init(repo); fileStatus [versionInfo.LocalPath] = versionInfo; } if (notify) { VersionControlService.NotifyFileStatusChanged(new FileUpdateEventArgs(repo, versionInfo.LocalPath, versionInfo.IsDirectory)); } }
/// <summary> /// Returns the versioning status of a set of files or directories /// </summary> /// <param name='paths'> /// A list of files or directories /// </param> /// <param name='getRemoteStatus'> /// True if remote status information has to be included /// </param> public IEnumerable <VersionInfo> GetVersionInfo(IEnumerable <FilePath> paths, VersionInfoQueryFlags queryFlags = VersionInfoQueryFlags.None) { if ((queryFlags & VersionInfoQueryFlags.IgnoreCache) != 0) { var res = OnGetVersionInfo(paths, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0); infoCache.SetStatus(res); return(res); } List <FilePath> pathsToQuery = new List <FilePath> (); var result = new List <VersionInfo> (); foreach (var p in paths) { var vi = infoCache.GetStatus(p); if (vi != null) { result.Add(vi); // This status has been invalidated, query it asynchronously if (vi.RequiresRefresh) { pathsToQuery.Add(p); } } else { // If there is no cached status, query it asynchronously vi = new VersionInfo(p, "", Directory.Exists(p), VersionStatus.Versioned, null, VersionStatus.Versioned, null); infoCache.SetStatus(vi, false); vi.Init(this); result.Add(vi); pathsToQuery.Add(p); } // Console.WriteLine ("GetVersionInfo " + string.Join (", ", paths.Select (p => p.FullPath))); } if (pathsToQuery.Count > 0) { AddQuery(new VersionInfoQuery() { Paths = pathsToQuery, QueryFlags = queryFlags }); } return(result); }
/// <summary> /// Returns the versioning status of a set of files or directories /// </summary> /// <param name='paths'> /// A list of files or directories /// </param> /// <param name='getRemoteStatus'> /// True if remote status information has to be included /// </param> public IEnumerable<VersionInfo> GetVersionInfo (IEnumerable<FilePath> paths, VersionInfoQueryFlags queryFlags = VersionInfoQueryFlags.None) { if ((queryFlags & VersionInfoQueryFlags.IgnoreCache) != 0) { // We shouldn't use IEnumerable because elements don't save property modifications. var res = OnGetVersionInfo (paths, (queryFlags & VersionInfoQueryFlags.IncludeRemoteStatus) != 0).ToList (); infoCache.SetStatus (res); return res; } List<FilePath> pathsToQuery = new List<FilePath> (); var result = new List<VersionInfo> (); foreach (var p in paths) { var vi = infoCache.GetStatus (p); if (vi != null) { result.Add (vi); // This status has been invalidated, query it asynchronously if (vi.RequiresRefresh) pathsToQuery.Add (p); } else { // If there is no cached status, query it asynchronously vi = new VersionInfo (p, "", Directory.Exists (p), VersionStatus.Versioned, null, VersionStatus.Versioned, null); infoCache.SetStatus (vi, false); vi.Init (this); result.Add (vi); pathsToQuery.Add (p); } // Console.WriteLine ("GetVersionInfo " + string.Join (", ", paths.Select (p => p.FullPath))); } if (pathsToQuery.Count > 0) AddQuery (new VersionInfoQuery () { Paths = pathsToQuery, QueryFlags = queryFlags }); return result; }