diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/database.rs | 14 | ||||
| -rw-r--r-- | src/git.rs | 29 | ||||
| -rw-r--r-- | src/main.rs | 9 | 
3 files changed, 46 insertions, 6 deletions
| diff --git a/src/database.rs b/src/database.rs index 107a6d6..ed5d327 100644 --- a/src/database.rs +++ b/src/database.rs @@ -30,6 +30,7 @@ pub struct Repo {      id: i64,      name: Option<String>,      description: Option<String>, +    pub default_branch: Option<String>,      updated_at: Option<String>,  } @@ -47,6 +48,7 @@ impl From<&github::Repo> for Repo {              id: repo.id,              name: Some(repo.name.clone()),              description: repo.description.clone(), +            default_branch: Some(repo.default_branch.clone()),              updated_at: Some(repo.updated_at.clone()),          }      } @@ -95,6 +97,7 @@ impl Db {                      id INTEGER PRIMARY KEY,                      name TEXT NOT NULL,                      description TEXT, +                    default_branch TEXT,                      updated_at TEXT NOT NULL                  );              "#, @@ -128,6 +131,7 @@ impl Db {                  id,                  name,                  description, +                default_branch,                  updated_at              FROM repositories              WHERE id = ? @@ -139,7 +143,8 @@ impl Db {                          id: row.get(0)?,                          name: Some(row.get(1)?),                          description: row.get(2)?, -                        updated_at: Some(row.get(3)?), +                        default_branch: row.get(3)?, +                        updated_at: Some(row.get(4)?),                      }                  )              }, @@ -158,14 +163,15 @@ impl Db {          tx.execute(              r#"              INSERT INTO repositories -                (id, name, description, updated_at) +                (id, name, description, default_branch, updated_at)                  VALUES -                (?, ?, ?, ?) +                (?, ?, ?, ?, ?)              "#,              rusqlite::params![                  repo.id,                  &repo.name,                  &repo.description, +                &repo.default_branch,                  &repo.updated_at,              ],          )?; @@ -222,12 +228,14 @@ impl Db {              SET                  name = ?,                  description = ?, +                default_branch = ?,                  updated_at = ?              WHERE id = ?              "#,              rusqlite::params![                  &repo.name,                  &repo.description, +                &repo.default_branch,                  &repo.updated_at,                  repo.id,              ], @@ -76,9 +76,7 @@ pub fn mirror<P: AsRef<Path>>(      remote.fetch(&refspecs, None, None)?;      if default_branch != "master" { -        repo.set_head( -            &format!("refs/heads/{}", default_branch), -        )?; +        repo_change_current_branch(&repo, default_branch)?;      }      Ok(()) @@ -133,3 +131,28 @@ pub fn update_description<P: AsRef<Path>>(      Ok(())  } + +/// Change the current branch of the repository at `repo_path` to +/// `default_branch`. +pub fn change_current_branch<P: AsRef<Path>>( +    repo_path: P, +    default_branch: &str, +) -> Result<(), Error> { +    let repo = git2::Repository::open_bare(repo_path)?; + +    Ok( +        repo_change_current_branch(&repo, default_branch)? +    ) +} + +/// Change `repo`'s current branch to `default_branch`. +fn repo_change_current_branch( +    repo: &git2::Repository, +    default_branch: &str, +) -> Result<(), Error> { +    Ok( +        repo.set_head( +            &format!("refs/heads/{}", default_branch), +        )? +    ) +} diff --git a/src/main.rs b/src/main.rs index 0fdc715..878bd73 100644 --- a/src/main.rs +++ b/src/main.rs @@ -278,6 +278,15 @@ fn update<P: AsRef<Path>>(          git::update_description(&repo_path, remote_description)?;      } +    if let Some(default_branch) = ¤t_repo.default_branch { +        if default_branch != &updated_repo.default_branch { +            git::change_current_branch( +                &repo_path, +                &updated_repo.default_branch, +            )?; +        } +    } +      update_mtime(&repo_path, &updated_repo)?;      Ok(()) | 
