]> git.lizzy.rs Git - rust.git/commitdiff
Merge pull request #740 from svmnotn/less_tmp_files
authorNick Cameron <nrc@ncameron.org>
Sun, 10 Jan 2016 21:45:51 +0000 (10:45 +1300)
committerNick Cameron <nrc@ncameron.org>
Sun, 10 Jan 2016 21:45:51 +0000 (10:45 +1300)
stop creating bk files if there are no changes. Fixes #733

src/filemap.rs

index 5b997b55c251b9d1ca2eb1de9a0d70d993f14137..95ae95e66bc23afd32bcb25b6ad10c9adf6b4dd8 100644 (file)
@@ -85,21 +85,38 @@ fn write_system_newlines<T>(mut writer: T,
         }
     }
 
+    fn source_and_formatted_text(text: &StringBuffer,
+                                 filename: &str,
+                                 config: &Config)
+                                 -> Result<(String, String), io::Error> {
+        let mut f = try!(File::open(filename));
+        let mut ori_text = String::new();
+        try!(f.read_to_string(&mut ori_text));
+        let mut v = Vec::new();
+        try!(write_system_newlines(&mut v, text, config));
+        let fmt_text = String::from_utf8(v).unwrap();
+        Ok((ori_text, fmt_text))
+    }
+
     match mode {
         WriteMode::Replace => {
-            // Do a little dance to make writing safer - write to a temp file
-            // rename the original to a .bk, then rename the temp file to the
-            // original.
-            let tmp_name = filename.to_owned() + ".tmp";
-            let bk_name = filename.to_owned() + ".bk";
-            {
-                // Write text to temp file
-                let tmp_file = try!(File::create(&tmp_name));
-                try!(write_system_newlines(tmp_file, text, config));
-            }
+            if let Ok((ori, fmt)) = source_and_formatted_text(text, filename, config) {
+                if fmt != ori {
+                    // Do a little dance to make writing safer - write to a temp file
+                    // rename the original to a .bk, then rename the temp file to the
+                    // original.
+                    let tmp_name = filename.to_owned() + ".tmp";
+                    let bk_name = filename.to_owned() + ".bk";
+                    {
+                        // Write text to temp file
+                        let tmp_file = try!(File::create(&tmp_name));
+                        try!(write_system_newlines(tmp_file, text, config));
+                    }
 
-            try!(fs::rename(filename, bk_name));
-            try!(fs::rename(tmp_name, filename));
+                    try!(fs::rename(filename, bk_name));
+                    try!(fs::rename(tmp_name, filename));
+                }
+            }
         }
         WriteMode::Overwrite => {
             // Write text directly over original file.
@@ -124,14 +141,10 @@ fn write_system_newlines<T>(mut writer: T,
         }
         WriteMode::Diff => {
             println!("Diff of {}:\n", filename);
-            let mut f = try!(File::open(filename));
-            let mut ori_text = String::new();
-            try!(f.read_to_string(&mut ori_text));
-            let mut v = Vec::new();
-            try!(write_system_newlines(&mut v, text, config));
-            let fmt_text = String::from_utf8(v).unwrap();
-            let diff = make_diff(&ori_text, &fmt_text, 3);
-            print_diff(diff, |line_num| format!("\nDiff at line {}:", line_num));
+            if let Ok((ori, fmt)) = source_and_formatted_text(text, filename, config) {
+                print_diff(make_diff(&ori, &fmt, 3),
+                           |line_num| format!("\nDiff at line {}:", line_num));
+            }
         }
         WriteMode::Return => {
             // io::Write is not implemented for String, working around with