]> gitweb @ CieloNegro.org - sugar.git/commitdiff
tools/export.pl
authorPHO <pho@cielonegro.org>
Tue, 1 Oct 2013 04:18:44 +0000 (13:18 +0900)
committerPHO <pho@cielonegro.org>
Tue, 1 Oct 2013 04:18:44 +0000 (13:18 +0900)
GNUmakefile
tools/export.pl [new file with mode: 0644]

index e38637daae86ac9fb782222d2387e8dd7efa973d..dbfabaea0830b89425564f0b5870cda40a7b263f 100644 (file)
@@ -6,12 +6,14 @@ help:
        @echo "  make lint    - lint The Sugar System."
        @echo "  make update  - update repository with the current dot files."
        @echo "  make commit  - commit changes to the repository."
        @echo "  make lint    - lint The Sugar System."
        @echo "  make update  - update repository with the current dot files."
        @echo "  make commit  - commit changes to the repository."
-       @echo "  make install - update the current dot files with the repository."
+       @echo "  make install - update current dot files with the repository."
        @echo "  make import FILES=<FILES>"
        @echo "  make import FILES=<FILES>"
-       @echo "               - import the dot files into the repository."
+       @echo "               - import dot files into the repository."
        @echo "  make import-all"
        @echo "               - import every uncontrolled dot files, which aren't"
        @echo "                 ignored, into the repository."
        @echo "  make import-all"
        @echo "               - import every uncontrolled dot files, which aren't"
        @echo "                 ignored, into the repository."
+       @echo "  make export FILSE=<FILES>"
+       @echo "               - export dot files from the repository."
        @echo "  make diff FILE=<FILE>"
        @echo "               - show diff of the dot file."
        @echo
        @echo "  make diff FILE=<FILE>"
        @echo "               - show diff of the dot file."
        @echo
@@ -55,6 +57,18 @@ import-all:
                perl ./tools/import.pl
        -git status
 
                perl ./tools/import.pl
        -git status
 
+ifeq ($(FILES),)
+export:
+       @echo "Specify at least one file."
+       @echo "Usage: $(MAKE) export FILES=<FILES>"
+       @exit 1
+else
+export:
+       @echo $(FILES) | \
+               tr -s " " "\n" | \
+               perl ./tools/export.pl
+endif
+
 ifeq ($(FILE),)
 diff:
        @echo "Specify one file."
 ifeq ($(FILE),)
 diff:
        @echo "Specify one file."
@@ -65,4 +79,4 @@ diff:
        perl ./tools/diff.pl $(FILE) | $(PAGER)
 endif
 
        perl ./tools/diff.pl $(FILE) | $(PAGER)
 endif
 
-.PHONY: help lint update commit install import diff
+.PHONY: help lint update commit install import export diff
diff --git a/tools/export.pl b/tools/export.pl
new file mode 100644 (file)
index 0000000..46f50c0
--- /dev/null
@@ -0,0 +1,39 @@
+use strict;
+use warnings;
+use Smart::Comments;
+use lib 'tools';
+require 'utils.pl';
+use File::Spec;
+use File::Compare;
+use File::Copy;
+
+sub main {
+    while (defined(my $arg = <>)) {
+        chomp $arg;
+
+        my $rel   = File::Spec->file_name_is_absolute($arg)
+                  ? File::Spec->abs2rel($arg, $ENV{HOME})
+                  : $arg;
+        my $abs   = File::Spec->rel2abs($rel, $ENV{HOME});
+        my $saved = rel2saved($rel);
+
+        if (!-e $saved) {
+            print "SKIP: $rel is not in the repository.\n";
+            next;
+        }
+        elsif (-e $abs) {
+            if (compare($abs, $saved) == 0) {
+                print "SKIP: $rel is identical to the copy in the repository.\n";
+            }
+            else {
+                print "SKIP: $rel is different from the copy in the repository.\n";
+            }
+        }
+        else {
+            print "Copying $saved to $abs...\n";
+            copy($saved, $abs) or die $!;
+        }
+    }
+}
+
+main();