supermario/bin/MPW-3.2.3/Scripts/CompareRevisions
2019-06-29 22:17:03 +08:00

154 lines
4.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#
# CompareRevisions - Compare the revision in the named file with another revision
# of the same file.
#
# Usage: CompareRevisions file
#
# CompareRevisions compares the revision of the named file with another revision
# of the same file. If they don't match it brings them both up on the screen and
# puts them side by side. A menu is appended to the menu bar to go through
# the changes. When all the changes have been shown, the revision windows are
# restored and closed.
#
# The differences are shown from bottom to top so that if any changes are made
# in the files, the line offsets are not messed up.
#
# To add CompareRevisions to a menu, execute the following command:
#
# AddMenu Project 'CompareRevisions' 'CompareRevisions "{Active}" ∑∑ "{WorkSheet}"'
#
# This script creates three temporary files which are deleted on exit or abort.
# {ShellDirectory}Compare_File, {ShellDirectory}Compare_State and file,<rev>,
#
#
# NOTE:
# 1. CompareRevisions calls the script CompareFiles.
#
# © Apple Computer, Inc. 1988 - 1990
# All rights reserved.
Set Exit 0
Set error 0
Begin
# Check parameters.
If {#} ≠ 1
Echo "### Usage - {0} file"
Exit 0
End > Dev:StdErr
# Make sure the file exists
If "" == "`Exists -f "{1}"`"
Echo "### {0} - File ∂"{1}∂" not found"
Exit 4
End
# Break apart the pathname.
Set f "{1}"
If "{f}" =~ /(≈)®1:(≈)®2/
Set dir "{®1}:"
Set f "{®2}"
Else
Set dir `directory`
If "{dir}" =~ /(≈)®1:/
Set dir "{®1}:"
End
End
Set path "{dir}{f}"
# See if the file belongs to a project.
# Then find the name of the parent project.
(Set info "`ProjectInfo "{path}"`" || Set error 1)
(Evaluate "{info}" =~ /[¬,]+,([¬ ∂t+*∂']+)®4([+*]«0,1»)®1[∂']* ≈/
Evaluate "{info}" =~ /≈Project: (≈∫)®2 +Checked out≈/ ) >dev:null
If {error} ≠ 0 || "{info}" == ""
Alert "∂"{path}∂" doesnt belong to a project."
Exit 0
End
Set rev1 "{®4}"
# At this point:
# {®1} => '', '+', or '*'
# {®2} => project path
# {path} => file pathname
# {rev1} => revision
# {dir} => file directory path
# {f} => file leaf name
#
# Is the right project mounted?
(Set revList "`ProjectInfo -s -project "{®2}" "{f}"`") ≥dev:null
If "{revlist}" == ""
Alert "Project ∂"{®2}∂" is not mounted."
Exit 0
End
# Remove checked out ('+') revisions from the revision list.
Loop
If "`Evaluate " {revlist}" =~ /(≈)®7 (∂')«0,1»{f},[¬+]+∂+(∂')«0,1»(≈)®8/`"
Set revlist "{®7}{®8}"
Else
Break
End
End
# Remove the current revision from the revision list.
If ".{®1}" !~ /.[+*]/ && "`Evaluate " {revlist}" =~ /(≈[¬'])®7[∂']«0,1»{f},{rev1}[∂']«0,1»(≈)®8/`"
Set revlist "{®7}{®8}"
End > dev:null
If "{revlist}" =~ / */
Alert "No revisions to compare against."
Exit 4 # we're done if the rev list is null
End
# Request the number of the revision to be compared.
(Set rev2 "`GetListItem -r 8 -m "Compare ∂"{f},{rev1}{®1}∂" with:" -d {revList} ∂
|| Set error {Status}`")
If {error} == 0
(Evaluate "{rev2}" =~ /≈,(≈)®7/ ) >dev:null
Set rev2 "{®7}"
# Rename the active window so we can checkout a read-only copy of the
# revision we want to compare against. We'll have to change the name back.
# Find a temporary directory where I can checkout the file
Set coDir "{MPW}CompareRevisions.Dir:"
Delete -i -y "{coDir}"
NewFolder "{coDir}"
(Checkout "{f},{rev2}" -d "{coDir}" -project "{®2}" || Set error {Status})
If {error} ≠ 0
Alert "∂"{f},{rev2}∂" cant be checked out [{error}]."
Rename "{path},{rev1}{®1}" "{path}"
Delete -i -y "{coDir}"
Exit 0
End
Move "{coDir}{f}" "{path},{rev2}"
Delete -i -y "{coDir}"
# Compare the two files and then clean up.
CompareFiles "{path}" "{path},{rev2}" ∑ dev:null
Set MyStatus {Status}
If {MyStatus} == 2
Echo Delete ∂""{path},{rev2}"∂" >> "{ShellDirectory}Compare_State"
Else If {MyStatus} == 0
Alert "Revisions match."
Delete "{path},{rev2}"
End
End
End