base, rebase: Support specifying a tag rather than a commit

Josh Triplett created

After parsing the revision, peel it to a commit before getting its id.

Change summary

src/main.rs | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

Detailed changes

src/main.rs 🔗

@@ -463,7 +463,8 @@ fn base(repo: &Repository, m: &ArgMatches) -> Result<()> {
     } else {
         let base = m.value_of("base").unwrap();
         let base_object = try!(repo.revparse_single(base));
-        let base_id = base_object.id();
+        let base_commit = try!(base_object.peel(ObjectType::Commit));
+        let base_id = base_commit.id();
         let s_working_series = try!(try!(internals.working.get("series")).ok_or("Could not find entry \"series\" in working vesion of current series"));
         if base_id != s_working_series.id() && !try!(repo.graph_descendant_of(s_working_series.id(), base_id)) {
             return Err(format!("Cannot set base to {}: not an ancestor of the patch series {}", base, s_working_series.id()).into());
@@ -1343,7 +1344,8 @@ fn rebase(repo: &Repository, m: &ArgMatches) -> Result<()> {
         None => None,
         Some(onto) => {
             let obj = try!(repo.revparse_single(onto));
-            Some(obj.id())
+            let commit = try!(obj.peel(ObjectType::Commit));
+            Some(commit.id())
         },
     };