Significant Updates to the Project 3 Specification -------------------------------------------------- 1. After 'gitlet init', there will be a single branch: master, which initially points to the initial commit, and master will be the current branch. 2. In listing untracked files, ignore subdirectories. 3. The last two sections of the status command (modifications not staged and untracked files) are extra credit. Feel free to leave them blank (leaving just the headers). 4. Versions of files written out by checkout (2- and 3-argument versions) are not staged. 5. The one-argument checkout command (checkout [branch name]) clears the staging area. 6. Use the same error message in cases 1 & 2 of the checkout command when a file is not present: "File does not exist in that commit." 7. In case 3 of the checkout command, use the error message "No such branch exists." 8. Perform the check that checkout or reset does not overwrite untracked files before making any changes. 9. The reset command removes tracked files that are not present in the in the reset-to commit. 10. The reset command clears the staging area. 11. Handle untracked files that would be modified or deleted by reset as for checkout. 12. In the merge command, if the branch being merged in is an ancestor of the current branch, print the informational message "Given branch is an ancestor of the current branch." 13. If a merge is a fast-forward operation (the current branch is an ancestor of the given branch), print the informational message "Current branch fast-forwarded." 14. If there is no common ancestor for the current and given branch, use the initial commit of the current branch as the common ancestor (should only come up if you do extra credit part on remotes). 15. If conflicted merged files don't end in a newline, don't add one; just let the conflict markers be concatenated to the file contents, as in <<<<<<< HEAD contents of file in current branch======= contents of file in given branch>>>>>>> 16. Do not merge if there are uncommitted adds or removals staged. 17. In the merge command, treat untracked files that would be removed or overwritten as for checkout and reset: report the error and do not merge. 18. In the add-remote command, just use a simple file name for the remote location (I decided the URL-like syntax, file://.... was not a great idea since real URLs don't really allow relative file paths.) Also, always use '/' as the path separator (even on Windows) and in your code, do the substitution of java.io.File.separator for "/" (in this respect, we DO behave like file URLs). 19. After adding a file that was marked to be removed, the file should no longer be marked for removal. 20. The status command should not list staged files as untracked, even if they are untracked in the current commit (in keeping with the behavior of full git). 21. Clarify that multiword [commit message]s for "find" must be quoted, as for the commit command. 22. Clarify that program should always exit with code 0, even in the presence of errors.