|
1 | 1 | using System.Text;
|
| 2 | +using System.Threading.Tasks; |
2 | 3 |
|
3 | 4 | namespace SourceGit.Commands
|
4 | 5 | {
|
@@ -79,5 +80,81 @@ public static bool DeleteRemote(string repo, string remote, string name, Models.
|
79 | 80 | cmd.Log = log;
|
80 | 81 | return cmd.Exec();
|
81 | 82 | }
|
| 83 | + |
| 84 | + public static async Task<string> ShowCurrentAsync(string repo) |
| 85 | + { |
| 86 | + var cmd = new Command(); |
| 87 | + cmd.WorkingDirectory = repo; |
| 88 | + cmd.Context = repo; |
| 89 | + cmd.Args = "branch --show-current"; |
| 90 | + return (await cmd.ReadToEndAsync()).StdOut.Trim(); |
| 91 | + } |
| 92 | + |
| 93 | + public static async Task<bool> CreateAsync(string repo, string name, string basedOn, bool force, Models.ICommandLog log) |
| 94 | + { |
| 95 | + var builder = new StringBuilder(); |
| 96 | + builder.Append("branch "); |
| 97 | + if (force) |
| 98 | + builder.Append("-f "); |
| 99 | + builder.Append(name); |
| 100 | + builder.Append(" "); |
| 101 | + builder.Append(basedOn); |
| 102 | + |
| 103 | + var cmd = new Command(); |
| 104 | + cmd.WorkingDirectory = repo; |
| 105 | + cmd.Context = repo; |
| 106 | + cmd.Args = builder.ToString(); |
| 107 | + cmd.Log = log; |
| 108 | + return await cmd.ExecAsync(); |
| 109 | + } |
| 110 | + |
| 111 | + public static async Task<bool> RenameAsync(string repo, string name, string to, Models.ICommandLog log) |
| 112 | + { |
| 113 | + var cmd = new Command(); |
| 114 | + cmd.WorkingDirectory = repo; |
| 115 | + cmd.Context = repo; |
| 116 | + cmd.Args = $"branch -M {name} {to}"; |
| 117 | + cmd.Log = log; |
| 118 | + return await cmd.ExecAsync(); |
| 119 | + } |
| 120 | + |
| 121 | + public static async Task<bool> SetUpstreamAsync(string repo, string name, string upstream, Models.ICommandLog log) |
| 122 | + { |
| 123 | + var cmd = new Command(); |
| 124 | + cmd.WorkingDirectory = repo; |
| 125 | + cmd.Context = repo; |
| 126 | + cmd.Log = log; |
| 127 | + |
| 128 | + if (string.IsNullOrEmpty(upstream)) |
| 129 | + cmd.Args = $"branch {name} --unset-upstream"; |
| 130 | + else |
| 131 | + cmd.Args = $"branch {name} -u {upstream}"; |
| 132 | + |
| 133 | + return await cmd.ExecAsync(); |
| 134 | + } |
| 135 | + |
| 136 | + public static async Task<bool> DeleteLocalAsync(string repo, string name, Models.ICommandLog log) |
| 137 | + { |
| 138 | + var cmd = new Command(); |
| 139 | + cmd.WorkingDirectory = repo; |
| 140 | + cmd.Context = repo; |
| 141 | + cmd.Args = $"branch -D {name}"; |
| 142 | + cmd.Log = log; |
| 143 | + return await cmd.ExecAsync(); |
| 144 | + } |
| 145 | + |
| 146 | + public static async Task<bool> DeleteRemoteAsync(string repo, string remote, string name, Models.ICommandLog log) |
| 147 | + { |
| 148 | + bool exists = await new Remote(repo).HasBranchAsync(remote, name); |
| 149 | + if (exists) |
| 150 | + return await new Push(repo, remote, $"refs/heads/{name}", true) { Log = log }.ExecAsync(); |
| 151 | + |
| 152 | + var cmd = new Command(); |
| 153 | + cmd.WorkingDirectory = repo; |
| 154 | + cmd.Context = repo; |
| 155 | + cmd.Args = $"branch -D -r {remote}/{name}"; |
| 156 | + cmd.Log = log; |
| 157 | + return await cmd.ExecAsync(); |
| 158 | + } |
82 | 159 | }
|
83 | 160 | }
|
0 commit comments