From e035b808881ef1bd858376ae65ec73e50cbf14b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A7alo=20Val=C3=A9rio?= Date: Wed, 4 Nov 2020 21:33:11 +0000 Subject: [PATCH] step twenty two: tag, create the tag ref --- src/base.rs | 2 +- src/data.rs | 9 ++++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/base.rs b/src/base.rs index 5bbf018..b4aac35 100644 --- a/src/base.rs +++ b/src/base.rs @@ -116,7 +116,7 @@ pub fn checkout(oid: String) { } pub fn create_tag(name: String, oid: String) { - println!("{} - {}", name, oid); + data::update_ref(format!("refs/tags/{}", name), oid); } fn is_ignored(path: &String) -> bool { diff --git a/src/data.rs b/src/data.rs index a2aba4e..52d8cf2 100644 --- a/src/data.rs +++ b/src/data.rs @@ -1,5 +1,6 @@ use sha1::{Digest, Sha1}; use std::fs; +use std::path::Path; use std::str; static RGIT_DIR: &'static str = ".rgit"; @@ -43,7 +44,13 @@ pub fn get_object(hash: String, expected: String) -> String { } pub fn update_ref(reference: String, oid: String) { - fs::write(format!("{}/{}", RGIT_DIR, reference), oid).expect("Failed to updated HEAD"); + let path = format!("{}/{}", RGIT_DIR, reference); + let mut parents = Path::new(&path).ancestors(); + parents.next(); + + let parent = parents.next().unwrap().to_str().unwrap(); + fs::create_dir_all(parent).expect("Cannot create required dirs"); + fs::write(path, oid).expect("Failed to updated HEAD"); } pub fn get_ref(reference: String) -> Result> {