Annotation of embedaddon/curl/packages/vms/compare_curl_source.com, revision 1.1
1.1 ! misho 1: $! Compare_curl_source.com
! 2: $!
! 3: $! $Id$
! 4: $!
! 5: $! This procedure compares the files in two directories and reports the
! 6: $! differences. It is customized for the vmsports repository layout.
! 7: $!
! 8: $! It needs to be customized to the local site directories.
! 9: $!
! 10: $! This is used by me for these purposes:
! 11: $! 1. Compare the original source of a project with an existing
! 12: $! VMS port.
! 13: $! 2. Compare the checked out repository of a project with the
! 14: $! the local working copy to make sure they are in sync.
! 15: $! 3. Keep a copy directory up to date. The third is needed by
! 16: $! me because VMS Backup can create a saveset of files from a
! 17: $! NFS mounted volume.
! 18: $!
! 19: $! First the files in the original source directory which is assumed to be
! 20: $! under source code control are compared with the copy directory.
! 21: $!
! 22: $! Then the files are are only in the copy directory are listed.
! 23: $!
! 24: $! The result will five diagnostics about of files:
! 25: $! 1. Files that are not generation 1.
! 26: $! 2. Files missing in the copy directory.
! 27: $! 3. Files in the copy directory not in the source directory.
! 28: $! 4. Files different from the source directory.
! 29: $! 5. Files that VMS DIFF can not process.
! 30: $!
! 31: $! This needs to be run on an ODS-5 volume.
! 32: $!
! 33: $! If UPDATE is given as a second parameter, files missing or different in the
! 34: $! copy directory will be updated.
! 35: $!
! 36: $! By default:
! 37: $! The directory src_root:[project_name] will be translated to something like
! 38: $! DISK:[dir.dir.reference.project_name] and this will be used
! 39: $! to calculate DISK:[dir.dir.vms_source.project_name] for the VMS specific
! 40: $! source directory.
! 41: $!
! 42: $! The copy directory is vms_root:[project_name]
! 43: $! The UPDATE parameter is ignored.
! 44: $!
! 45: $! This setting is used to make sure that the working vms directory
! 46: $! and the repository checkout directory have the same contents.
! 47: $!
! 48: $! If P1 is "SRCBCK" then this
! 49: $! The source directory tree is: src_root:[project_name]
! 50: $! The copy directory is src_root1:[project_name]
! 51: $!
! 52: $! src_root1:[project_name] is used by me to work around that VMS backup will
! 53: $! not use NFS as a source directory so I need to make a copy.
! 54: $!
! 55: $! This is to make sure that the backup save set for the unmodified
! 56: $! source is up to date.
! 57: $!
! 58: $! If your repository checkout is not on an NFS mounted volume, you do not
! 59: $! need to use this option or have the logical name src_root1 defined.
! 60: $!
! 61: $! If P1 is "VMSBCK" then this changes the two directories:
! 62: $! The source directory is vms_root:[project_name]
! 63: $! The copy directory is vms_root1:[project_name]
! 64: $!
! 65: $! vms_root:[project_name] is where I do the VMS specific edits.
! 66: $! vms_root1:[project_name] is used by me to work around that VMS backup will
! 67: $! not use NFS as a source directory so I need to make a copy.
! 68: $!
! 69: $! This is to make sure that the backup save set for the unmodified
! 70: $! source is up to date.
! 71: $!
! 72: $! Copyright 2011 - 2020, John Malmberg
! 73: $!
! 74: $! Permission to use, copy, modify, and/or distribute this software for any
! 75: $! purpose with or without fee is hereby granted, provided that the above
! 76: $! copyright notice and this permission notice appear in all copies.
! 77: $!
! 78: $! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
! 79: $! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
! 80: $! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
! 81: $! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
! 82: $! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
! 83: $! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
! 84: $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
! 85: $!
! 86: $! 18-Aug-2011 J. Malmberg
! 87: $!==========================================================================
! 88: $!
! 89: $! Update missing/changed files.
! 90: $ update_file = 0
! 91: $ if (p2 .eqs. "UPDATE")
! 92: $ then
! 93: $ update_file = 1
! 94: $ endif
! 95: $!
! 96: $ myproc = f$environment("PROCEDURE")
! 97: $ myprocdir = f$parse(myproc,,,"DIRECTORY") - "[" - "]" - "<" - ">"
! 98: $ myprocdir = f$edit(myprocdir, "LOWERCASE")
! 99: $ mydefault = f$environment("DEFAULT")
! 100: $ mydir = f$parse(mydefault,,,"DIRECTORY")
! 101: $ mydir = f$edit(mydir, "LOWERCASE")
! 102: $ odelim = f$extract(0, 1, mydir)
! 103: $ mydir = mydir - "[" - "]" - "<" - ">"
! 104: $ mydev = f$parse(mydefault,,,"DEVICE")
! 105: $!
! 106: $ ref = ""
! 107: $ if P1 .eqs. ""
! 108: $ then
! 109: $ ref_base_dir = myprocdir
! 110: $ wrk_base_dir = mydir
! 111: $ update_file = 0
! 112: $ resultd = f$parse("src_root:",,,,"NO_CONCEAL")
! 113: $ resultd = f$edit(resultd, "LOWERCASE")
! 114: $ resultd = resultd - "][" - "><" - ".;" - ".."
! 115: $ resultd_len = f$length(resultd) - 1
! 116: $ delim = f$extract(resultd_len, 1, resultd)
! 117: $ ref_root_base = mydir + delim
! 118: $ resultd = resultd - ref_root_base - "reference." + "vms_source."
! 119: $ ref = resultd + ref_base_dir
! 120: $ wrk = "VMS_ROOT:" + odelim + wrk_base_dir
! 121: $ resultd_len = f$length(resultd) - 1
! 122: $ resultd = f$extract(0, resultd_len, resultd) + delim
! 123: $ ref_root_dir = f$parse(resultd,,,"DIRECTORY")
! 124: $ ref_root_dir = f$edit(ref_root_dir, "LOWERCASE")
! 125: $ ref_root_dir = ref_root_dir - "[" - "]"
! 126: $ ref_base_dir = ref_root_dir + "." + ref_base_dir
! 127: $ endif
! 128: $!
! 129: $ if p1 .eqs. "SRCBCK"
! 130: $ then
! 131: $ ref_base_dir = "curl"
! 132: $ wrk_base_dir = "curl"
! 133: $ ref = "src_root:[" + ref_base_dir
! 134: $ wrk = "src_root1:[" + wrk_base_dir
! 135: $ if update_file
! 136: $ then
! 137: $ if f$search("src_root1:[000000]curl.dir") .eqs. ""
! 138: $ then
! 139: $ create/dir/prot=o:rwed src_root1:[curl]
! 140: $ endif
! 141: $ endif
! 142: $ endif
! 143: $!
! 144: $!
! 145: $ if p1 .eqs. "VMSBCK"
! 146: $ then
! 147: $ ref_base_dir = "curl"
! 148: $ wrk_base_dir = "curl"
! 149: $ ref = "vms_root:[" + ref_base_dir
! 150: $ wrk = "vms_root1:[" + wrk_base_dir
! 151: $ if update_file
! 152: $ then
! 153: $ if f$search("vms_root1:[000000]curl.dir") .eqs. ""
! 154: $ then
! 155: $ create/dir/prot=o:rwed vms_root1:[curl]
! 156: $ endif
! 157: $ endif
! 158: $ endif
! 159: $!
! 160: $!
! 161: $ if ref .eqs. ""
! 162: $ then
! 163: $ write sys$output "Unknown compare type specified!"
! 164: $ exit 44
! 165: $ endif
! 166: $!
! 167: $!
! 168: $! Future - check the device types involved for the
! 169: $! the syntax to check.
! 170: $ ODS2_SYNTAX = 0
! 171: $ NFS_MANGLE = 0
! 172: $ PWRK_MANGLE = 0
! 173: $!
! 174: $ vax = f$getsyi("HW_MODEL") .lt. 1024
! 175: $ if vax
! 176: $ then
! 177: $ ODS2_SYNTAX = 1
! 178: $ endif
! 179: $!
! 180: $ report_missing = 1
! 181: $!
! 182: $ if .not. ODS2_SYNTAX
! 183: $ then
! 184: $ set proc/parse=extended
! 185: $ endif
! 186: $!
! 187: $loop:
! 188: $ ref_spec = f$search("''ref'...]*.*;",1)
! 189: $ if ref_spec .eqs. "" then goto loop_end
! 190: $!
! 191: $ ref_dev = f$parse(ref_spec,,,"DEVICE")
! 192: $ ref_dir = f$parse(ref_spec,,,"DIRECTORY")
! 193: $ ref_dir = f$edit(ref_dir, "LOWERCASE")
! 194: $ ref_name = f$parse(ref_spec,,,"NAME")
! 195: $ ref_type = f$parse(ref_spec,,,"TYPE")
! 196: $!
! 197: $!
! 198: $ rel_path = ref_dir - "[" - ref_base_dir
! 199: $! rel_path_len = f$length(rel_path) - 1
! 200: $! delim = f$extract(rel_path_len, 1, rel_path)
! 201: $! rel_path = rel_path - ".]" - ".>" - "]" - ">"
! 202: $! rel_path = rel_path + delim
! 203: $!
! 204: $ if ODS2_SYNTAX
! 205: $ then
! 206: $! if rel_path .eqs. ".examples.scripts^.noah]"
! 207: $! then
! 208: $! rel_path = ".examples.scripts_noah]"
! 209: $! endif
! 210: $! if rel_path .eqs. ".examples.scripts^.v2]"
! 211: $! then
! 212: $! rel_path = ".examples.scripts_v2]"
! 213: $! endif
! 214: $ endif
! 215: $!
! 216: $ wrk_path = wrk + rel_path
! 217: $!
! 218: $ ref_name_type = ref_name + ref_type
! 219: $!
! 220: $ if ODS2_SYNTAX
! 221: $ then
! 222: $ endif
! 223: $!
! 224: $ wrk_spec = wrk_path + ref_name_type
! 225: $!
! 226: $!
! 227: $ wrk_chk = f$search(wrk_spec, 0)
! 228: $ if wrk_chk .eqs. ""
! 229: $ then
! 230: $ if report_missing
! 231: $ then
! 232: $ write sys$output "''wrk_spec' is missing"
! 233: $ endif
! 234: $ if update_file
! 235: $ then
! 236: $ copy/log 'ref_spec' 'wrk_spec'
! 237: $ endif
! 238: $ goto loop
! 239: $ endif
! 240: $!
! 241: $ wrk_name = f$parse(wrk_spec,,,"NAME")
! 242: $ wrk_type = f$parse(wrk_spec,,,"TYPE")
! 243: $ wrk_fname = wrk_name + wrk_type"
! 244: $ ref_fname = ref_name + ref_type
! 245: $!
! 246: $ if ref_fname .nes. wrk_fname
! 247: $ then
! 248: $ write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'"""
! 249: $ endif
! 250: $!
! 251: $ ref_type = f$edit(ref_type, "UPCASE")
! 252: $ if ref_type .eqs. ".DIR" then goto loop
! 253: $!
! 254: $ if ODS2_SYNTAX
! 255: $ then
! 256: $ ref_fname = f$edit(ref_fname, "LOWERCASE")
! 257: $ endif
! 258: $!
! 259: $! These files are in the wrong format for VMS diff, and we don't change them.
! 260: $ ref_skip = 0
! 261: $ if ref_type .eqs. ".PDF" then ref_skip = 1
! 262: $ if ref_type .eqs. ".HTML" then ref_skip = 1
! 263: $ if ref_type .eqs. ".HQX" then ref_skip = 1
! 264: $ if ref_type .eqs. ".P12" then ref_skip = 1
! 265: $ if ref_type .eqs. "."
! 266: $ then
! 267: $ if f$locate("test", ref_fname) .eq. 0 then ref_skip = 1
! 268: $ if ref_fname .eqs. "configure." then ref_skip = 1
! 269: $ endif
! 270: $ if ref_fname .eqs. "MACINSTALL.TXT" then ref_skip = 1
! 271: $ if ref_fname .eqs. "$macinstall.txt" then ref_skip = 1
! 272: $ if ref_fname .eqs. "curl.mcp$5nxml$5nsit$5nhqx" then ref_skip = 1
! 273: $ if ref_fname .eqs. "curl_GUSIConfig.cpp" then ref_skip = 1
! 274: $ if ref_fname .eqs. "curl_$gusic$onfig.cpp" then ref_skip = 1
! 275: $ if ref_fname .eqs. "macos_main.cpp" then ref_skip = 1
! 276: $!
! 277: $!
! 278: $ if ref_skip .ne. 0
! 279: $ then
! 280: $ if report_missing
! 281: $ then
! 282: $ write sys$output "Skipping diff of ''ref_fname'"
! 283: $ endif
! 284: $ goto loop
! 285: $ endif
! 286: $!
! 287: $!
! 288: $ wrk_ver = f$parse(wrk_chk,,,"VERSION")
! 289: $ if wrk_ver .nes. ";1"
! 290: $ then
! 291: $ write sys$output "Version for ''wrk_spec' is not 1"
! 292: $ endif
! 293: $ set noon
! 294: $ diff/out=nl: 'wrk_spec' 'ref_spec'
! 295: $ if $severity .nes. "1"
! 296: $ then
! 297: $ write sys$output "''wrk_spec' is different from ''ref_spec'"
! 298: $ if update_file
! 299: $ then
! 300: $ delete 'wrk_spec';*
! 301: $ copy/log 'ref_spec' 'wrk_spec'
! 302: $ endif
! 303: $ endif
! 304: $ set on
! 305: $
! 306: $!
! 307: $ goto loop
! 308: $loop_end:
! 309: $!
! 310: $!
! 311: $missing_loop:
! 312: $! For missing loop, check the latest generation.
! 313: $ ref_spec = f$search("''wrk'...]*.*;")
! 314: $ if ref_spec .eqs. "" then goto missing_loop_end
! 315: $!
! 316: $ ref_dev = f$parse(ref_spec,,,"DEVICE")
! 317: $ ref_dir = f$parse(ref_spec,,,"DIRECTORY")
! 318: $ ref_dir = f$edit(ref_dir, "LOWERCASE")
! 319: $ ref_name = f$parse(ref_spec,,,"NAME")
! 320: $ ref_type = f$parse(ref_spec,,,"TYPE")
! 321: $ ref_name_type = ref_name + ref_type
! 322: $!
! 323: $ rel_path = ref_dir - "[" - wrk_base_dir
! 324: $!
! 325: $!
! 326: $ wrk_path = ref + rel_path
! 327: $ wrk_spec = wrk_path + ref_name + ref_type
! 328: $ wrk_name = f$parse(wrk_spec,,,"NAME")
! 329: $ wrk_type = f$parse(wrk_spec,,,"TYPE")
! 330: $!
! 331: $ wrk_fname = wrk_name + wrk_type"
! 332: $ ref_fname = ref_name + ref_type
! 333: $!
! 334: $ wrk_skip = 0
! 335: $ ref_utype = f$edit(ref_type,"UPCASE")
! 336: $ ref_ufname = f$edit(ref_fname,"UPCASE")
! 337: $!
! 338: $ if wrk_skip .eq. 0
! 339: $ then
! 340: $ wrk_chk = f$search(wrk_spec, 0)
! 341: $ if wrk_chk .eqs. ""
! 342: $ then
! 343: $ if report_missing
! 344: $ then
! 345: $ write sys$output "''wrk_spec' is missing"
! 346: $ endif
! 347: $ goto missing_loop
! 348: $ endif
! 349: $ else
! 350: $ goto missing_loop
! 351: $ endif
! 352: $!
! 353: $ if ref_fname .nes. wrk_fname
! 354: $ then
! 355: $ write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'"""
! 356: $ endif
! 357: $!
! 358: $ if ref_utype .eqs. ".DIR" then goto missing_loop
! 359: $!
! 360: $ wrk_ver = f$parse(wrk_chk,,,"VERSION")
! 361: $ if wrk_ver .nes. ";1"
! 362: $ then
! 363: $ write sys$output "Version for ''wrk_spec' is not 1"
! 364: $ endif
! 365: $!
! 366: $ goto missing_loop
! 367: $!
! 368: $!
! 369: $missing_loop_end:
! 370: $!
! 371: $exit
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>