private void CurrentBranch(string path, bool fetch) { const string gitArgs = @"status -b -s"; Console.WriteLine("REPOSITORIES"); Console.WriteLine("{0,-40}{1,-30}{2,-25}{3}", "Repository", "Current branch", "Status", "Modified/Last Fetch"); Console.WriteLine("======================================= ============================= ======================== ==================="); var enumerable = Directory.GetDirectories(path) .Select(r => { var name = Path.GetFileName(r); if (fetch) { Console.Write("{0,-40}{1}", name, "fetching...\r"); Context.Git(r, "fetch", out _, out _); } var gitOut = Context.Git(r, gitArgs, out _, out _); var repo = new RepositoryInfo { Path = r, Name = name, IsGithub = true }; ParseStatus(repo, gitOut); repo.Modified = new DateTime(Math.Max(repo.Modified.Ticks, GetLastFetchDate(r).Ticks)); return(repo); }); foreach (var repo in enumerable) { if (repo.IsGithub) { Console.Write("{0,-40}", repo.Name); using (BranchColor(repo.Branch)) Console.Write("{0,-30}", repo.Branch); using (StatusColor(repo.CommitStatus)) Console.Write("{0,-25}", repo.Status); SetDefaultColor(); Console.WriteLine(DateTools.FormatDate(repo.Modified)); } else { using (new ColoredBlock(ConsoleColor.White, ConsoleColor.DarkRed)) { Console.Write("{0,-40}", repo.Name); Console.Write("{0,-30}", "Not a github repository"); Console.Write("{0,-25}", ""); Console.Write("{0,-19}", ""); Console.WriteLine(); } } } }
/// <summary> /// 写入日志 /// </summary> /// <param name="msg"></param> public static void Write(LogMessage msg) { try { var fi = new System.IO.FileInfo(IO.PathTool.Map(XCore.LogPath, DateTools.FormatDate(), msg.LogLevel + ".log")); if (!fi.Directory.Exists) { fi.Directory.Create(); } var fs = fi.Exists ? fi.AppendText() : fi.CreateText(); fs.WriteLine(string.Format("{0} {1} - {2}", DateTools.Format(msg.LogTime), msg.LogLevel, msg.Message)); fs.Flush(); fs.Dispose(); } catch { } }
private static string FormatDate(TimeSpan diff) { var now = new DateTime(2018, 07, 17, 10, 00, 00); return(DateTools.FormatDate(now - diff, now)); }