]> git.neil.brown.name Git - wiggle.git/commitdiff
vpatch: allow a save file to be restored.
authorNeilBrown <neilb@suse.de>
Wed, 14 Nov 2012 02:58:57 +0000 (13:58 +1100)
committerNeilBrown <neilb@suse.de>
Wed, 14 Nov 2012 02:58:57 +0000 (13:58 +1100)
Signed-off-by: NeilBrown <neilb@suse.de>
vpatch.c

index dc3f8796e09074ea323ba6cb15de17fbc71b0166..aae1d33aff08f4d5a9db2344273ec1904c9337b1 100644 (file)
--- a/vpatch.c
+++ b/vpatch.c
@@ -2399,6 +2399,26 @@ static void main_window(struct plist *pl, int *np, FILE *f, int reverse)
                        }
                        break;
 
+               case 'R': /* Restore updated file */
+                       if (pl[pos].end == 0)
+                               mesg = "Cannot restore a folder.";
+                       else if (!pl[pos].is_merge)
+                               mesg = "File has not been saved, cannot restore.";
+                       else {
+                               /* rename foo.porig to foo, and clear is_merge */
+                               char *file = pl[pos].file;
+                               char *orignew = xmalloc(strlen(file) + 20);
+                               strcpy(orignew, file);
+                               strcat(orignew, ".porig");
+                               if (rename(orignew, file) == 0) {
+                                       mesg = "File has been restored.";
+                                       pl[pos].is_merge = 0;
+                                       refresh = 1;
+                               } else
+                                       mesg = "Could not restore file!";
+                       }
+                       break;
+
                case '?':
                        help_window(main_help, NULL);
                        refresh = 2;