(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "XCL" BASE 10)
(filecreated " 9-Aug-90 19:39:26" |{PELE:MV:ENVOS}<LISPCORE>INTERNAL>LIBRARY>CHANGECONTROL.;5| 13413  

      |changes| |to:|  (vars *change-control-dev-dirs* *change-control-freeze-dirs*)

      |previous| |date:| "27-Jul-90 13:58:46" 
|{PELE:MV:ENVOS}<LISPCORE>INTERNAL>LIBRARY>CHANGECONTROL.;4|)


; Copyright (c) 1987, 1988, 1989, 1990 by Venue & Xerox Corporation.  All rights reserved.

(prettycomprint changecontrolcoms)

(rpaqq changecontrolcoms (

(* |;;;| "Automate the process of change-control submission")

                              
                              (* |;;| "Variables which control change control:")

                              
                              (* |;;| "*CHANGE-CONTROL-DEV-DIRS* an AList of item-type -> dir name")

                              
                              (* |;;| "*CHANGE-CONTROL-FREEZE-DIRS* likewise for freeze dirs")

                              
                              (* |;;| 
                        "*CHANGE-CONTROL-CHANGE-TEAMS* names to send change control submissions to")

                              (files comparesources)
                              (vars *change-control-dev-dirs* *change-control-freeze-dirs* 
                                    *change-control-change-teams* 
                                    *change-control-development-leaders* 
                                    *change-control-comparison-functions*)
                              (initvars (*cc-see-details* nil))
                              (fns changecontrol)
                              (commands "cc")))



(* |;;;| "Automate the process of change-control submission")




(* |;;| "Variables which control change control:")




(* |;;| "*CHANGE-CONTROL-DEV-DIRS* an AList of item-type -> dir name")




(* |;;| "*CHANGE-CONTROL-FREEZE-DIRS* likewise for freeze dirs")




(* |;;| "*CHANGE-CONTROL-CHANGE-TEAMS* names to send change control submissions to")


(filesload comparesources)

(rpaqq *change-control-dev-dirs* ((nil . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (source . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (sources . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (:sources . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (:source . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (lib . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (library . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (:lib . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (:library . "{pele:mv:Envos}<Medley>1.2>new>")
                                      (pce . |{ERIS}<Lispcore>internal>Library>|)
                                      (:pce . |{ERIS}<Lispcore>internal>Library>|)
                                      (rooms . |{Pogo:AISNorth}<Rooms>Medley>Sources>|)
                                      (:rooms . |{Pogo:AISNorth}<Rooms>Medley>Sources>|)))

(rpaqq *change-control-freeze-dirs* ((nil . "{pele:mv:envos}<medley>1.2>sources>")
                                         (source . "{pele:mv:envos}<medley>1.2>sources>")
                                         (sources . "{pele:mv:envos}<medley>1.2>sources>")
                                         (:sources . "{pele:mv:envos}<medley>1.2>sources>")
                                         (:source . "{pele:mv:envos}<medley>1.2>sources>")
                                         (lib . "{pele:mv:envos}<medley>1.2>library>")
                                         (library . "{pele:mv:envos}<medley>1.2>library>")
                                         (:lib . "{pele:mv:envos}<medley>1.2>library>")
                                         (:library . "{pele:mv:envos}<medley>1.2>library>")
                                         (rooms . |{Pallas:AISNorth}<Rooms>Medley>Sources>|)
                                         (:rooms . |{Pallas:AISNorth}<Rooms>Medley>Sources>|)))

(rpaqq *change-control-change-teams* ((nil gv "James.envos, Sybalsky.envos" ns 
                                               "MedleyDev:MV:Envos")
                                          (source gv "James.envos, Sybalsky.envos" ns 
                                                 "MedleyDev:MV:Envos")
                                          (sources gv "James.envos, Sybalsky.envos" ns 
                                                 "MedleyDev:MV:Envos")
                                          (:sources gv "James.envos, Sybalsky.envos" ns 
                                                 "MedleyDev:MV:Envos")
                                          (:source gv "James.envos, Sybalsky.envos" ns 
                                                 "MedleyDev:MV:Envos")
                                          (lib gv "James.envos, Sybalsky.envos" ns 
                                               "MedleyDev:MV:Envos")
                                          (library gv "James.envos, Sybalsky.envos" ns 
                                                 "MedleyDev:MV:Envos")
                                          (:lib gv "James.envos, Sybalsky.envos" ns 
                                                "MedleyDev:MV:Envos")
                                          (:library gv "James.envos, Sybalsky.envos" ns 
                                                 "MedleyDev:MV:Envos")
                                          (rooms gv 
                                           "James.envos, Kohlsaat.envos, RClarke.envos, Harada.envos"
                                                 ns 
                               "James:AISNorth, Kohlsaat:AISNorth, RClarke:AISNorth, Harada:AISNorth"
                                                 )
                                          (:rooms gv 
                                           "James.envos, Kohlsaat.envos, RClarke.envos, Harada.envos"
                                                 ns 
                               "James:AISNorth, Kohlsaat:AISNorth, RClarke:AISNorth, Harada:AISNorth"
                                                 )))

(rpaqq *change-control-development-leaders* ((nil gv "Sybalsky.envos" ns "")
                                                 (source gv "Sybalsky.envos" ns "")
                                                 (sources gv "Sybalsky.envos" ns "")
                                                 (:sources gv "Sybalsky.envos" ns "")
                                                 (:source gv "Sybalsky.envos" ns "")
                                                 (lib gv "Sybalsky.envos" ns "")
                                                 (library gv "Sybalsky.envos" ns "")
                                                 (:lib gv "Sybalsky.envos" ns "")
                                                 (:library gv "Sybalsky.envos" ns "")
                                                 (rooms gv "Cutting.pa" ns "Cutting:PARC")
                                                 (:rooms gv "Cutting.pa" ns "Cutting:PARC")))

(rpaqq *change-control-comparison-functions* nil)

(rpaq? *cc-see-details* nil)
(defineq

(CHANGECONTROL
  (LAMBDA (FILES TYPE DETAILS?)                          (* \; "Edited 11-Oct-88 18:44 by jds")

    (* |;;| "Build a change-control message to the change-control team for the files in FILES, which may be a list or a single file name.  The file name may include extensions and version numberts, and the comparison is always against the LATEST version on the freeze directory.")

    (* |;;| "TYPE (presently one of NIL, SOURCE, SOURCES, LIB, LIBRARY), is looked up in several ALists to control what directories the files will be on, and who gets the change-control message..  This permits future extensions to other products.")

    (LET* ((COMFILE (OPENSTREAM '{NODIRCORE} 'BOTH 'NEW))
           (DEVDIR (CDR (ASSOC TYPE *CHANGE-CONTROL-DEV-DIRS*)))
           (FREEZEDIR (CDR (ASSOC TYPE *CHANGE-CONTROL-FREEZE-DIRS*)))
           (CHANGETEAM (LISTGET (CDR (ASSOC TYPE *CHANGE-CONTROL-CHANGE-TEAMS*))
                              (LAFITEMODE)))
           (DEV-LEADER (LISTGET (CDR (ASSOC TYPE *CHANGE-CONTROL-DEVELOPMENT-LEADERS*))
                              (LAFITEMODE)))
           (COMPAREFN (OR (CDR (ASSOC TYPE *CHANGE-CONTROL-COMPARISON-FUNCTIONS*))
                          (FUNCTION COMPARESOURCES)))
           (DATED-FILES (|for| FILE |inside| FILES
                           |join| (LIST (FINDFILE FILE NIL (LIST DEVDIR))
                                            (GETFILEINFO (FINDFILE FILE NIL (LIST DEVDIR))
                                                   'CREATIONDATE))))
           MSG)

          (* |;;| "Do the comparison of latest file with the latest frozen file.")

          (FRESHLINE PROMPTWINDOW)
          (PRINTOUT PROMPTWINDOW "Comparing sources...")
          (|for| FILE |inside| FILES |do| (PRINTOUT PROMPTWINDOW FILE " ")
                                                   (PRINTOUT COMFILE T T 
                                                        "- - - - - - - - - - - - - - - - - - - - - -"
                                                          T T)
                                                   (APPLY* COMPAREFN (PACKFILENAME 'DIRECTORY 
                                                                            FREEZEDIR 'VERSION NIL
                                                                            'BODY FILE)
                                                          (PACKFILENAME 'DIRECTORY DEVDIR
                                                                 'BODY FILE)
                                                          NIL NIL COMFILE))
          (PRINTOUT PROMPTWINDOW "Done." T)

          (* |;;| 
        "Build the change-control detail message that goes to the development project leader:")

          (SETQ MSG (OPENTEXTSTREAM (CONCAT "Subject: Change Control Detail for " FILES "
To: " DEV-LEADER "
cc: " (FULLUSERNAME)
                                           (CL:FORMAT NIL "~%~%Candidate files:~%     ~A (~A)~%"
                                                  (CAR DATED-FILES)
                                                  (CADR DATED-FILES))
                                           (CL:FORMAT NIL "~{~5t~A (~A)~%~}" (CDDR DATED-FILES))
                                           "Comparison of Sources:
")
                           NIL NIL NIL (LIST 'FONT LAFITEEDITORFONT)))
                                                             (* \; "Msg header")
          (TEDIT.SETSEL MSG (|fetch| (TEXTOBJ TEXTLEN) |of| (TEXTOBJ MSG))
                 0
                 'RIGHT NIL T)                               (* \; "Go to the end")
          (SETFILEPTR COMFILE 0)
          (TEDIT.INCLUDE MSG COMFILE)                        (* \; 
                                                           "And append the comparison results")
          (TEDIT.LOOKS MSG '(FAMILY GACHA SIZE 10 WEIGHT MEDIUM SLOPE REGULAR))
          (COND
             ((OR *CC-SEE-DETAILS* DETAILS?)                 (* \; "He wants to see the details")
              (ADD.PROCESS `(\\SENDMESSAGE ',MSG 'NAME 'MESSAGESENDER)))
             (T                                              (* \; 
                                               "Doesn't want to see it; just fire the details off.")
                (LAFITE.SENDMESSAGE MSG)))

          (* |;;| "Now build the message form")

          (SETQ MSG (OPENTEXTSTREAM (CONCAT "Subject: Change Control for " FILES "
To: " CHANGETEAM "
cc: " (FULLUSERNAME)
                                           (CL:FORMAT NIL "~%~%Candidate files:~%     ~A (~A)~%"
                                                  (CAR DATED-FILES)
                                                  (CADR DATED-FILES))
                                           (CL:FORMAT NIL "~{~5t~A (~A)~%~}" (CDDR DATED-FILES))
                                           "
ARs fixed:  >>list of AR numbers<<" "

Changes:  >>Explanation of change<<" 
                            "

Patch File:  >>location of patch file, or note that it's whole-file<<" 
                                    "
Tests: >>location of regression test/script, test case itself," " or ref to AR test case used<<

")
                           NIL NIL NIL (LIST 'FONT LAFITEEDITORFONT)))
                                                             (* \; "Msg header")
          (TEDIT.SETSEL MSG 1 0 'LEFT)
          (TEDIT.NEXT MSG)                                   (* \; 
                                   "Now leave him at the \"explanation\" fill-in, and send it off.")
          (ADD.PROCESS `(\\SENDMESSAGE ',MSG 'NAME 'MESSAGESENDER)))))
)

(defcommand "cc" (file-or-files &optional type) (changecontrol file-or-files (cl:intern
                                                                                  (string type)
                                                                                  'interlisp)))
(putprops changecontrol copyright ("Venue & Xerox Corporation" 1987 1988 1989 1990))
(declare\: dontcopy
  (filemap (nil (7352 13020 (changecontrol 7362 . 13018)))))
stop
