-
-
Notifications
You must be signed in to change notification settings - Fork 7k
Fix compile errors after renaming files, related to unsaved changes in the sketch #4358
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
When a sketch has unsaved changes, a temporary copy of the sketch is made with those changes applied. This copy is then passed to arduino-builder. Previously, this temporary copy was kept around and only deleted when the IDE was closed. However, all files were written to it again on every build, so keeping the old files around did not serve any real purpose. When a file was renamed in the IDE, the original name would still be present in the temporary copy, and could cause linker errors because both were compiled. This commit makes sure the temporary copy is deleted after every build, instead of at IDE exit, which fixes this problem with renames. When a file is deleted from the sketch, the file would also be deleted from the temporary copy, presumably to fix this same problem for deletes (but renames were forgotten). With this commit, this special handling for deleting files is no longer needed, so it is removed. This fixes arduino#4335
When a sketch has unsaved changes, a temporary copy of the sketch is made with those changes applied. This copy is then passed to arduino-builder. Previously, the name of this directory contained a hash of the main sketch filename, so the same directory would be used between builds. Now that this directory is deleted after every build, it can just use a randomized directory name, which is what this commit does. Addtionally, the prefix used for generating the name is changed from "arduino_" to "arduino_modified_sketch_" to make it slightly clearer what the directory is for (just in case it somehow survives the build, or a user sees it during the build).
If a sketch has many .cpp files, will this change force them to all be rebuild even if only the main .ino has changed?
Nope, currently arduino-builder currently compares the contents of all files in this temporary directory with their copies in the build directory, and only copies/recompiles them if they actually changed (disregarding the timestamps on the files). See these comments for some more details:
This PR does not implement the additional improvement suggested in the first comment, it just fixes the problem without needing changes to arduino-builder.
Build successful. Please test this code using one of the following:
http://downloads.arduino.cc/javaide/pull_requests/arduino-PR-4358-BUILD-468-linux32.tar.xz
http://downloads.arduino.cc/javaide/pull_requests/arduino-PR-4358-BUILD-468-linux64.tar.xz
http://downloads.arduino.cc/javaide/pull_requests/arduino-PR-4358-BUILD-468-windows.zip
http://downloads.arduino.cc/javaide/pull_requests/arduino-PR-4358-BUILD-468-macosx.zip
LGTM 👍
Fix #4335 by always deleting the temporary sketch copy after every build. With that, the name of that directory can be random again, instead of needing to be deterministic using a hash of the main sketch filename.