comparison contrib/mercurial.el @ 2455:ff83112332f9

Emacs: follow the revision usage policy of "hg diff" command. This patche makes "parent" as default revision of diff command.
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Sun, 18 Jun 2006 04:13:33 +0900
parents 6d0a9de9a8ac
children aa16b42628b8
comparison
equal deleted inserted replaced
2451:134227b82a96 2455:ff83112332f9
893 (hg-commit-mode)))))) 893 (hg-commit-mode))))))
894 894
895 (defun hg-diff (path &optional rev1 rev2) 895 (defun hg-diff (path &optional rev1 rev2)
896 "Show the differences between REV1 and REV2 of PATH. 896 "Show the differences between REV1 and REV2 of PATH.
897 When called interactively, the default behaviour is to treat REV1 as 897 When called interactively, the default behaviour is to treat REV1 as
898 the tip revision, REV2 as the current edited version of the file, and 898 the \"parent\" revision, REV2 as the current edited version of the file, and
899 PATH as the file edited in the current buffer. 899 PATH as the file edited in the current buffer.
900 With a prefix argument, prompt for all of these." 900 With a prefix argument, prompt for all of these."
901 (interactive (list (hg-read-file-name " to diff") 901 (interactive (list (hg-read-file-name " to diff")
902 (hg-read-rev " to start with") 902 (let ((rev1 (hg-read-rev " to start with" 'parent)))
903 (and (not (eq rev1 'parent)) rev1))
903 (let ((rev2 (hg-read-rev " to end with" 'working-dir))) 904 (let ((rev2 (hg-read-rev " to end with" 'working-dir)))
904 (and (not (eq rev2 'working-dir)) rev2)))) 905 (and (not (eq rev2 'working-dir)) rev2))))
905 (hg-sync-buffers path) 906 (hg-sync-buffers path)
906 (let ((a-path (hg-abbrev-file-name path)) 907 (let ((a-path (hg-abbrev-file-name path))
907 (r1 (or rev1 "tip")) 908 ;; none revision is specified explicitly
909 (none (and (not rev1) (not rev2)))
910 ;; only one revision is specified explicitly
911 (one (or (and (or (equal rev1 rev2) (not rev2)) rev1)
912 (and (not rev1) rev2)))
908 diff) 913 diff)
909 (hg-view-output ((cond 914 (hg-view-output ((cond
910 ((and (equal r1 "tip") (not rev2)) 915 (none
911 (format "Mercurial: Diff against tip of %s" a-path)) 916 (format "Mercurial: Diff against parent of %s" a-path))
912 ((equal r1 rev2) 917 (one
913 (format "Mercurial: Diff of rev %s of %s" r1 a-path)) 918 (format "Mercurial: Diff of rev %s of %s" one a-path))
914 (t 919 (t
915 (format "Mercurial: Diff from rev %s to %s of %s" 920 (format "Mercurial: Diff from rev %s to %s of %s"
916 r1 (or rev2 "Current") a-path)))) 921 rev1 rev2 a-path))))
917 (if rev2 922 (cond
918 (call-process (hg-binary) nil t nil "diff" "-r" r1 "-r" rev2 path) 923 (none
919 (call-process (hg-binary) nil t nil "diff" "-r" r1 path)) 924 (call-process (hg-binary) nil t nil "diff" path))
925 (one
926 (call-process (hg-binary) nil t nil "diff" "-r" one path))
927 (t
928 (call-process (hg-binary) nil t nil "diff" "-r" rev1 "-r" rev2 path)))
920 (diff-mode) 929 (diff-mode)
921 (setq diff (not (= (point-min) (point-max)))) 930 (setq diff (not (= (point-min) (point-max))))
922 (font-lock-fontify-buffer)) 931 (font-lock-fontify-buffer))
923 diff)) 932 diff))
924 933
925 (defun hg-diff-repo () 934 (defun hg-diff-repo (path &optional rev1 rev2)
926 "Show the differences between the working copy and the tip revision." 935 "Show the differences between REV1 and REV2 of repository containing PATH.
927 (interactive) 936 When called interactively, the default behaviour is to treat REV1 as
928 (hg-diff (hg-root))) 937 the \"parent\" revision, REV2 as the current edited version of the file, and
938 PATH as the `hg-root' of the current buffer.
939 With a prefix argument, prompt for all of these."
940 (interactive (list (hg-read-file-name " to diff")
941 (let ((rev1 (hg-read-rev " to start with" 'parent)))
942 (and (not (eq rev1 'parent)) rev1))
943 (let ((rev2 (hg-read-rev " to end with" 'working-dir)))
944 (and (not (eq rev2 'working-dir)) rev2))))
945 (hg-diff (hg-root path) rev1 rev2))
929 946
930 (defun hg-forget (path) 947 (defun hg-forget (path)
931 "Lose track of PATH, which has been added, but not yet committed. 948 "Lose track of PATH, which has been added, but not yet committed.
932 This will prevent the file from being incorporated into the Mercurial 949 This will prevent the file from being incorporated into the Mercurial
933 repository on the next commit. 950 repository on the next commit.