added some better error handling to change detection
[scpubgit/File-Tree-Snapshot.git] / lib / File / Tree / Snapshot.pm
index 9b883f7..005a7c9 100644 (file)
@@ -1,3 +1,5 @@
+# lots of this stuff was sponsored by socialflow.com
+
 package File::Tree::Snapshot;
 use Moo;
 use File::Path;
@@ -61,7 +63,10 @@ sub create {
 sub _has_changes {
     my ($self) = @_;
     my $path = $self->storage_path;
-    my @changes = `cd $path && git diff --name-only --cached`;
+    my $cmd = qq{cd $path && git diff --name-only --cached};
+    CORE::open my $handle, '-|', $cmd
+      or die "Unable to find changes in ($cmd): $!\n";
+    my @changes = <$handle>;
     return scalar @changes;
 }
 
@@ -83,6 +88,8 @@ sub commit {
 sub reset {
     my ($self) = @_;
     $self->_git_exec('add .');
+    return 1
+        unless $self->_has_changes;
     $self->_git_exec('checkout -f');
     return 1;
 }
@@ -201,4 +208,8 @@ Will commit the changes made to the tree to the Git repository.
 
 Rolls back the changes since the last snapshot.
 
+=head1 SPONSORED
+
+The development of this module was sponsored by L<http://socialflow.com/>.
+
 =cut