Browse Source

Groups are now btreesets

Samuel W. Flint 3 years ago
parent
commit
819b806c8e
4 changed files with 46 additions and 44 deletions
  1. 1 1
      Cargo.lock
  2. 1 1
      Cargo.toml
  3. 38 38
      flake.nix
  4. 6 4
      src/lib/group.rs

+ 1 - 1
Cargo.lock

@@ -171,7 +171,7 @@ dependencies = [
 
 [[package]]
 name = "sync-it"
-version = "1.2.0"
+version = "1.2.1"
 dependencies = [
  "clap",
  "home",

+ 1 - 1
Cargo.toml

@@ -1,6 +1,6 @@
 [package]
 name = "sync-it"
-version = "1.2.0"
+version = "1.2.1"
 authors = ["Samuel W. Flint <swflint@flintfam.org>"]
 edition = "2018"
 

+ 38 - 38
flake.nix

@@ -9,45 +9,45 @@
   outputs = { self, nixpkgs, utils }:
     utils.lib.eachDefaultSystem (
       system:
-        let
-          pkgs = import nixpkgs { inherit system; };
-        in
-          rec {
-            packages = rec {
-
-              sync-it = pkgs.rustPlatform.buildRustPackage rec {
-                name = "sync-it";
-                version = "1.2.0";
-
-                src = ./.;
-
-                cargoSha256 = "ctv+0OgWtNh9ZO+ZCh+ehU8oOU2tQPQKNS7NbRgVHl4=";
-
-                meta = with pkgs.stdenv.lib; {
-                  description = "A simple, customizable synchronization tool.";
-                  license = licenses.gpl3Plus;
-                  maintainers = with maintainers; [ swflint ];
-                };
-              };
-
-              devEnvironment = pkgs.mkShell {
-                name = "sync-it-dev-environment";
-
-                buildInputs = [
-                  pkgs.pre-commit
-                  pkgs.rustc
-                  pkgs.cargo
-                  pkgs.rls
-                  pkgs.clippy
-                  pkgs.rustfmt
-                  pkgs.sloc
-                ];
-              };
+      let
+        pkgs = import nixpkgs { inherit system; };
+      in
+      rec {
+        packages = rec {
 
-            };
+          sync-it = pkgs.rustPlatform.buildRustPackage rec {
+            name = "sync-it";
+            version = "1.2.1";
+
+            src = ./.;
 
-            defaultPackage = packages.sync-it;
-            devShell = packages.devEnvironment;
-          }
+            cargoSha256 = "Ey6PJVmJXd2wCXemKfAHJ+EDVPtQezayuvOjQGQNGeU=";
+
+            meta = with pkgs.stdenv.lib; {
+              description = "A simple, customizable synchronization tool.";
+              license = licenses.gpl3Plus;
+              maintainers = with maintainers; [ swflint ];
+            };
+          };
+
+          devEnvironment = pkgs.mkShell {
+            name = "sync-it-dev-environment";
+
+            buildInputs = [
+              pkgs.pre-commit
+              pkgs.rustc
+              pkgs.cargo
+              pkgs.rls
+              pkgs.clippy
+              pkgs.rustfmt
+              pkgs.sloc
+            ];
+          };
+
+        };
+
+        defaultPackage = packages.sync-it;
+        devShell = packages.devEnvironment;
+      }
     );
 }

+ 6 - 4
src/lib/group.rs

@@ -1,5 +1,6 @@
 use serde::{Deserialize, Serialize};
 use std::fmt;
+use std::collections::BTreeSet;
 
 use crate::lib::config::Config;
 
@@ -10,14 +11,14 @@ pub struct Group {
     #[serde(default)]
     pub actions_after: Vec<String>,
     #[serde(default)]
-    pub members: Vec<String>,
+    pub members: BTreeSet<String>,
 }
 
 pub fn add(config: &mut Config, name: &String) {
     let group = Group {
         name: name.to_string(),
         actions_after: Vec::new(),
-        members: Vec::new()
+        members: BTreeSet::new()
     };
     config.groups.insert(name.to_string(), group);
     config.is_changed = true;
@@ -26,7 +27,7 @@ pub fn add(config: &mut Config, name: &String) {
 pub fn add_repo(config: &mut Config, name: &String, repo: &String) {
     match config.groups.get_mut(&name.to_string()) {
         Some(group) => {
-            group.members.push(repo.to_string());
+            group.members.insert(repo.to_string());
             config.is_changed = true;
         },
         None => panic!("No known group named \"{}\".", name)
@@ -46,7 +47,8 @@ pub fn add_action(config: &mut Config, name: &String, action: &String) {
 pub fn remove_repo(config: &mut Config, name: &String, repo: &String) {
     match config.groups.get_mut(&name.to_string()) {
         Some(group) => {
-            group.members.retain(|r| r != repo);
+            // group.members.retain(|r| r != repo);
+            group.members.remove(repo);
             config.is_changed = true;
         }
         None => panic!("No known group named \"{}\".", name)