mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-26 16:49:18 +00:00
154 lines
4.0 KiB
Plaintext
154 lines
4.0 KiB
Plaintext
|
#
|
|||
|
# 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}∂" doesn’t 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}∂" can’t 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
|