]> gitweb.fluxo.info Git - hydra.git/commitdiff
Refactor sync-media-remotes
authorSilvio Rhatto <rhatto@riseup.net>
Tue, 8 Nov 2016 18:08:17 +0000 (16:08 -0200)
committerSilvio Rhatto <rhatto@riseup.net>
Tue, 8 Nov 2016 18:08:17 +0000 (16:08 -0200)
share/hydractl/sync-media-remotes

index fd69708d6b0d41641f89486aae3b87fa3540356e..1b8f59ea97556b7d8c44a884df8c1ecc471e7a95 100755 (executable)
@@ -17,35 +17,45 @@ elif [ ! -d "$DEST/$MEDIA" ]; then
   exit 1
 fi
 
-# TODO
-echo "Needs work!"
-exit
-
 # Run
 for folder in `ls $MEDIA`; do
   if [ -d "$DEST/$MEDIA/$folder/.git" ]; then
-    git -C $MEDIA/$folder remote -v | grep "(fetch)" | sed -e 's/(fetch)//' | while read remote; do
-    (
+    # Add new remotes
+    git -C $MEDIA/$folder remote -v | while read remote; do
       cd $DEST/$MEDIA/$folder
       name="`echo $remote | cut -d ' ' -f 1`"
-      url="`echo $remote | cut -d ' ' -f 2`"
-
-      # Add and update
-      if [ "$name" != "all" ]; then
-        if ! git remote | grep -q "^$name$" ]; then
-          git remote add $remote
-        else
-          oldurl="`git remote -v | grep "^$name$" | grep "(fetch)" | cut -d ' ' -f 2`"
-
-          if [ "$url" != "$oldurl" ]; then
-            git remote set-url $name --delete $oldurl
-            git remote set-url $name --add    $url
-          fi
-        fi
+      addr="`echo $remote | cut -d  ' ' -f 2`"
+      type="`echo $remote | cut -d ' ' -f 3`"
+
+      if [ "$type" == "(push)" ]; then
+        command="set-url --push"
+      else
+        command="add"
+      fi
+
+      if ! git remote -v | sed -e 's/\t/ /g' | grep -q "^$name $addr $type$"; then
+        git remote $command $name $addr
+      fi
+    done
+
+    # Delete old remotes
+    git -C $DEST/$MEDIA/$folder remote -v | while read remote; do
+      cd $MEDIA/$folder
+      name="`echo $remote | cut -d ' ' -f 1`"
+      addr="`echo $remote | cut -d  ' ' -f 2`"
+      type="`echo $remote | cut -d ' ' -f 3`"
+
+      if [ "$type" == "(push)" ]; then
+        command="set-url --delete"
+        arg="$addr"
+      else
+        command="remove"
+        arg=""
       fi
 
-      # Remove dangling remotes
-    )
+      if ! git remote -v | sed -e 's/\t/ /g' | grep -q "^$name $addr $type$"; then
+        git -C $DEST/$MEDIA/$folder remote $command $name $arg
+      fi
     done
   fi
 done