Subversion Repositories DevTools

Rev

Rev 5506 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@LANGUAGE="VBSCRIPT"%>
<%
'=====================================================
'                  NEW VERSION
'               --- PROCESS FORM ---
'=====================================================
%>
<%
Option explicit
' Good idea to set when using redirect
Response.Expires = 0   ' always load the page, dont store
%>

<!--#include file="common/conf.asp"-->
<!--#include file="common/globals.asp"-->
<!--#include file="common/formating.asp"-->
<!--#include file="common/qstr.asp"-->
<!--#include file="common/common_subs.asp"-->
<!--#include file="common/common_dbedit.asp"-->
<!--#include file="common/release_changed.asp"-->
<%
' Set rfile parameter. This is a return page after Login
Call objPMod.StoreParameter ( "rfile", "dependencies.asp" )
'------------ ACCESS CONTROL ------------------
%>
<!--#include file="_access_control_login.asp"-->
<!--#include file="_access_control_general.asp"-->
<!--#include file="_access_control_project.asp"-->
<%
'------------ Variable Definition -------------
Dim parOLDpv_id
Dim parFRnewver
Dim NEWpv_id
Dim parSetToPv_id
Dim parSync_rtags
Dim toTouch
Dim parNewPackage
Dim parFRpkgName
Dim parChangeType
Dim parBase_view_id
Dim parPersonal_view_id
Dim parBuildType
Dim bImode
Dim newPkgPv_id
Dim errMessage

'------------ Constants Declaration -----------
'------------ Variable Init -------------------
parOLDpv_id = QStrPar("OLDpv_id")
parFRnewver = QStrPar("FRnewver")
parSetToPv_id = QStrPar("pv_id")
parSync_rtags = Request("sync_rtags")

parNewPackage = Request("newPackage")
parFRpkgName = Request("FRpkgName")
parChangeType = Request("change_type")
parBase_view_id = Request("base_view_id")
parPersonal_view_id = Request("personal_view_id")
parBuildType = Request("build_type")
bImode = (Request("iMode") = "pending")

'----------------------------------------------
%>
<%
'----------------------------------------------
'   Appears to be a 'Replace Version'
'   Args:   SSnewver            - New Version String (may be empty)
'           NNorig_pv_id        - original PVID
'           NNSetToPv_id        - New PVID
'           NNrtag_id           - Release Identifier
'           bImode              - True: Insert into pending
'           retNEWpv_id         - Return the PVID of the (replaced) package
'
   
Sub New_Version ( SSnewver, NNorig_pv_id, NNSetToPv_id, NNrtag_id, bImode, retNEWpv_id )
   Dim cAlterReleaseWhileRestrictive
   Dim newPkgVersion

   On Error Resume Next
   objEH.ErrorRedirect = TRUE

   ' Manually built package
   '    Force change type of 'Fixed'
   If parBuildType = "M" Then
      parChangeType = "F"
   End If

   ' If automatically assigned version number
   '    Reset the version string
   If parChangeType = "F" Then
      newPkgVersion = SSnewver
   Else
      newPkgVersion = Request("v_ext")
      SSnewver = ""
   End If

   OraDatabase.Parameters.Add "ORIG_PV_ID",  NNorig_pv_id,  ORAPARM_INPUT, ORATYPE_NUMBER
   OraDatabase.Parameters.Add "PKG_VERSION", newPkgVersion, ORAPARM_INPUT, ORATYPE_VARCHAR2

   ' Access Control - Allow release change while release is in restrictive mode
   cAlterReleaseWhileRestrictive = "N"
   If canActionControlInProject("AlterReleaseContentsInRestrictiveMode") Then cAlterReleaseWhileRestrictive = "Y"

   OraDatabase.Parameters.Add "BUILD_TYPE",                parBuildType,                  ORAPARM_INPUT, ORATYPE_CHAR
   OraDatabase.Parameters.Add "CHANGE_TYPE",               parChangeType,                 ORAPARM_INPUT, ORATYPE_CHAR
   OraDatabase.Parameters.Add "ALTER_RELEASE",             cAlterReleaseWhileRestrictive, ORAPARM_INPUT, ORATYPE_CHAR
   OraDatabase.Parameters.Add "SET_TO_PV_ID",              NNSetToPv_id,                  ORAPARM_INPUT, ORATYPE_NUMBER
   OraDatabase.Parameters.Add "RTAG_ID",                   NNrtag_id,                     ORAPARM_INPUT, ORATYPE_NUMBER
   OraDatabase.Parameters.Add "USER_ID",                   objAccessControl.UserId,       ORAPARM_INPUT, ORATYPE_NUMBER
   OraDatabase.Parameters.Add "enumISSUES_STATE_IMPORTED", enumISSUES_STATE_IMPORTED,     ORAPARM_INPUT, ORATYPE_NUMBER
   OraDatabase.Parameters.Add "RETPV_ID",                  0,                             ORAPARM_OUTPUT,ORATYPE_NUMBER

   objEH.TryORA ( OraSession )

    ' Create a new version of the package (if it does not exist)
    ' Check that we can update the release
    ' Replace package in the release
    '
    if bImode Then
        OraDatabase.ExecuteSQL _
        "BEGIN "&_
        " PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_
                               " :PKG_VERSION,"&_
                               " :BUILD_TYPE,"&_
                               " :CHANGE_TYPE,"&_
                               " :SET_TO_PV_ID,"&_
                               " :RTAG_ID,"&_
                               " :USER_ID,"&_
                               " :enumISSUES_STATE_IMPORTED,"&_
                               " :RETPV_ID ); "&_
        " PK_RELEASE.CAN_USER_WRITE_TO_RELEASE ( :RTAG_ID, :RETPV_ID, :ALTER_RELEASE ); "&_
        " PK_PLANNED.MERGE_PACKAGE (:RETPV_ID, PK_ENVIRONMENT.GET_VIEW_LOCATION (:ORIG_PV_ID, :RTAG_ID), :RTAG_ID, :USER_ID, 'A'); "&_
        "END;"
    Else
        OraDatabase.ExecuteSQL _
        "BEGIN "&_
        " PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_
                               " :PKG_VERSION,"&_
                               " :BUILD_TYPE,"&_
                               " :CHANGE_TYPE,"&_
                               " :SET_TO_PV_ID,"&_
                               " :RTAG_ID,"&_
                               " :USER_ID,"&_
                               " :enumISSUES_STATE_IMPORTED,"&_
                               " :RETPV_ID ); "&_
        " PK_RELEASE.CAN_USER_WRITE_TO_RELEASE ( :RTAG_ID, :RETPV_ID, :ALTER_RELEASE ); "&_
        " PK_ENVIRONMENT.REPLACE_PACKAGE ( :RETPV_ID, :ORIG_PV_ID, :RTAG_ID, :USER_ID ); "&_
        "END;"
    End If

    retNEWpv_id = OraDatabase.Parameters("RETPV_ID").Value

   objEH.CatchORA ( OraSession )
   If objEH.LastOraFailed = FALSE and not bImode Then
      Call UpdateChangeType (retNEWpv_id, parChangeType )
      Call UpdateReasonForVersion (retNEWpv_id, Request("FRreason"))
   End If

   OraDatabase.Parameters.Remove "ORIG_PV_ID"
   OraDatabase.Parameters.Remove "ALTER_RELEASE"
   OraDatabase.Parameters.Remove "PKG_VERSION"
   OraDatabase.Parameters.Remove "CHANGE_TYPE"
   OraDatabase.Parameters.Remove "BUILD_TYPE"
   OraDatabase.Parameters.Remove "SET_TO_PV_ID"
   OraDatabase.Parameters.Remove "RTAG_ID"
   OraDatabase.Parameters.Remove "USER_ID"
   OraDatabase.Parameters.Remove "enumISSUES_STATE_IMPORTED"
   OraDatabase.Parameters.Remove "RETPV_ID"
End Sub
'---------------------------------------------------------------
Function SanityCheck ( newVersion )

   SanityCheck = False

   Dim objRegEx, objRegEx2
   Set objRegEx = New RegExp
   Set objRegEx2 = New RegExp

   objRegEx.IgnoreCase = True
   objRegEx.Pattern = "^[0-9]+\.[0-9]+\.[0-9]+\.[a-zA-Z0-9]+$"
   objRegEx2.Pattern = "\.(cots)|(tool)$"

   If Len(newVersion) <= 50 Then
      If objRegEx.Test( newVersion ) OR objRegEx2.Test( newVersion ) Then
         SanityCheck = True
      End If
   End If

   If parBuildType = "A" Then
      SanityCheck = True
   End If

   Set objRegEx = Nothing
   Set objRegEx2 = Nothing
End Function

'-----------------------------------------------------------------------------------
'   Seed the Database
'   Create proto package-version to be used later
'
Sub Seed_DB ( retPV_ID )
   Dim QueryString
   On Error Resume Next

    OraDatabase.Parameters.Add "retPV_ID", 0, ORAPARM_OUTPUT, ORATYPE_NUMBER
    QueryString = "BEGIN Seed_Package_Names_Versions ("&_
                " '" & parFRpkgName & "'"&_
                ",'" & parFRnewver & "'" &_
                ",:USER_ID" &_
                ",:retPV_ID" &_
                ",NULL" &_
                ",'"& parBuildType & "'" &_
                ",'"& parChangeType & "'" &_
                "); END;"
    OraDatabase.ExecuteSQL QueryString
    retPV_ID = OraDatabase.Parameters("retPV_ID").Value

    OraDatabase.Parameters.Remove "retPV_ID"
End Sub

'-----------------------------------------------------------------------------------
' Add Package to a Release
Sub AddPackage ( sPvId )

   Dim rsQry, AssocMASS

   On Error Resume Next
   Set rsQry = OraDatabase.DbCreateDynaset( "SELECT * FROM RELEASE_TAGS RT, PACKAGE_VERSIONS PV WHERE RT.RTAG_ID ="&parRtag_id&" AND PV.PV_ID IN ("&sPvId&")", cint(0))
   AssocMASS = rsQry("ASSOC_MASS_REF")

   If ( IsNull(AssocMASS) ) OR (AssocMASS <> "" AND (rsQry("v_ext") <> ".cr" AND rsQry("v_ext") <> ".mas" )) Then
      OraDatabase.Parameters.Add "PV_ID_LIST", sPvId, ORAPARM_OUTPUT, ORATYPE_VARCHAR2
      OraDatabase.ExecuteSQL "BEGIN PK_ENVIRONMENT.ADD_PACKAGE ( :PV_ID_LIST, :BASE_VIEW_ID, :RTAG_ID, :USER_ID ); END;"
      OraDatabase.Parameters.Remove "PV_ID_LIST"
   Else
      Err.Raise 8, "Cannot ADD a CORE/MASS package into a MASS_REF Reference Release!"
   End If

End Sub

'-----------------------------------------------------------------------------------
Sub Add_Packages_To_View_Definition ( NNpkg_list )
   If OraDatabase.Parameters("PERSONAL_VIEW_ID").Value = "" Then Exit Sub
   OraDatabase.ExecuteSQL _
   " INSERT INTO view_def"&_
   "   SELECT TO_NUMBER( :PERSONAL_VIEW_ID ) AS view_id, pkg.pkg_id"&_
   "     FROM packages pkg"&_
   "    WHERE pkg.pkg_id IN ( "& NNpkg_list &" )"&_
   "   MINUS "&_
   "   SELECT vd.view_id, vd.pkg_id"&_
   "     FROM view_def vd"&_
   "    WHERE vd.view_id = :PERSONAL_VIEW_ID "
End Sub
'-----------------------------------------------------------------------------------

%>
<%
'-----------------------  MAIN LINE  ---------------------------
Dim rsQry, Query_String, Record_Count
Dim versionToSanityCheck

'Response.Write "<pre>------------<br>"
'Dim Item
'For Each Item In Request.Form
'    Response.Write "User Data: " &Item & ": " & Request.Form(Item) & "<br>"
'Next
'Response.Write "------------<br></pre>"
'Call Destroy_All_Objects
'Response.End

'--- Process submission ---
If ((parNewPackage <> "") AND parNewPackage) Then
    '
    ' Creating a new package and its first version
    ' Appears to work for others too
    Dim reResult
    Dim pkgFound

    ' Ensure that the named package does not exist
    ' Can't create it if it already exists
    '
    pkgFound = ""
    Query_String = "SELECT pkg.*" &_
         "  FROM packages pkg"&_
         " WHERE pkg.pkg_id != 0"&_
         "   AND UPPER(pkg.pkg_name) = UPPER('"& Trim(parFRpkgName) & "')"

    Set rsQry = OraDatabase.DbCreateDynaset( Query_String, ORADYN_DEFAULT )
    If ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) Then
        pkgFound = rsQry("pkg_id")
    End If
    rsQry.Close
    Set rsQry = Nothing

    '
    ' Don't need to create the package
    ' It will spring into existance if it does not exist
    '

    On Error Resume Next
    Dim bAdded: bAdded = False

    'Response.Write "<pre>------------<br>"
    'Dim Item
    'For Each Item In Request.Form
    '    Response.Write "User Data: " &Item & ": " & Request.Form(Item) & "<br>"
    'Next
    'Response.Write "------------<br></pre>"

    If ( parFRpkgName <> "" and parFRnewver  <> "") Then

        ' Determine the state of the Release
        ' Can only add packages to a release that is in Open Mode(N) or Restricted Mode(R)
        Set rsQry = OraDatabase.DbCreateDynaset( "SELECT OFFICIAL FROM RELEASE_TAGS WHERE RTAG_ID ="&parRtag_id, cint(0))
        objEH.Try
        If releaseIsWritable(rsQry("official")) Then

          OraSession.BeginTrans

          '---- SQL parameters ----
          OraDatabase.Parameters.Add "RTAG_ID", parRtag_id, ORAPARM_INPUT, ORATYPE_NUMBER
          OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER
          OraDatabase.Parameters.Add "BASE_VIEW_ID", parBase_view_id, ORAPARM_INPUT, ORATYPE_NUMBER
          OraDatabase.Parameters.Add "PERSONAL_VIEW_ID", parPersonal_view_id, ORAPARM_INPUT, ORATYPE_NUMBER

          '---- Create Version and Add to Release ----
          Call Seed_DB ( newPkgPv_id )
          If Err.Number = 0 Then
            Call AddPackage ( newPkgPv_id )
            If Err.Number = 0 Then
                If NOT IsNull(parPersonal_view_id) Then
                    Call Add_Packages_To_View_Definition ( newPkgPv_id )
                End If
            End If
          End If

          OraDatabase.Parameters.Remove "RTAG_ID"
          OraDatabase.Parameters.Remove "USER_ID"
          OraDatabase.Parameters.Remove "BASE_VIEW_ID"
          OraDatabase.Parameters.Remove "PERSONAL_VIEW_ID"
      
          '---- Insert additional information
          If Err.Number = 0 Then
            Call UpdateReasonForVersion (newPkgPv_id, Request("FRreason"))
          End If

          '---- Insert Package Licence info
          If Err.Number = 0 Then
            Call UpdateLicenceInfo (newPkgPv_id, Request("licence_id"))
          End If


          '---- Commit or Rollback the transaction
          If Err.number <> 0 Then
             OraSession.RollBack
             Call RaiseMsg ( enum_MSG_ERROR, Err.description )
          Else
            OraSession.CommitTrans
            bAdded = True
          End If

          '---- Run Release Changed scripts on archive server
          '---- This is a new package so it should not be needed
          '
          'If bAdded Then
          '  Dim objRC: Set objRC = New ReleaseChanged
          '  Call objRC.Run_ReleaseChanged_List(parRtag_id,newPkgPv_id,enumRELEASE_CHANGE_MODE_PKG_ADDED)
          '  Set objRC = Nothing
          'End If

          '--- Direct user the package-version that we have just added
          '--- Goto the page with the release notes as more info will need to be added
          Call Destroy_All_Objects
          Response.Redirect("fixed_issues.asp?rtag_id="& parRtag_id & "&pv_id=" & newPkgPv_id )

        Else
          Err.Raise 8, "Cannot ADD a package in a CLOSED or CCB Release Mode"
        End If
        rsQry.Close
        Set rsQry = nothing
        objEH.Catch
    Else
       Response.write "Some mandatory parameters are missing!. Need parNewPackage and parFRnewver" & "<br>" 'TODO
       Response.write QSTR_FullQuery
    End If

' Not Creating a new package
ElseIf (parOLDpv_id <> "") AND ( (parFRnewver <> "") OR (parSetToPv_id <> "") ) AND (parRtag_id <> "") Then
      ' All mandatory parameters FOUND
      If ( (parSetToPv_id <> "") OR SanityCheck(parFRnewver) ) Then

         Record_Count = 0

         If parBuildType = "M" Then
            Query_string = " SELECT pv.pv_id, pv.is_patch, pv.dlocked"&_
                           " FROM package_versions pv"&_
                           " WHERE pv.pkg_version = '"& parFRnewver &"'"&_
                           " AND pv.pkg_id IN (SELECT DISTINCT origpv.pkg_id"&_
                           "  FROM package_versions origpv"&_
                           " WHERE origpv.pv_id = "& parOLDpv_id &")"

            Set rsQry = OraDatabase.DbCreateDynaset(Query_String, cint(0))
            Record_Count = rsQry.RecordCount
            rsQry.Close()
            Set rsQry = Nothing
         End If

         If Record_Count > 0 And parBuildType = "M" Then
            Call RaiseMsg ( enum_MSG_PACKAGE_VERSION_EXISTS&"?rtag_id="& parRtag_id &"&pv_id="& parOLDpv_id &"", parFRnewver )
         Else
            Call New_Version ( parFRnewver, parOLDpv_id, parSetToPv_id, parRtag_id, bImode, NEWpv_id )

            If not bImode Then
                ' Direct insert ( not pending )
                ' Report change to Release archive server so that it can be synced
                Dim objRC: Set objRC = New ReleaseChanged
                Call objRC.Run_ReleaseChanged(parRtag_id,NEWpv_id,enumRELEASE_CHANGE_MODE_PKG_ADDED, true)
                Call objRC.Run_ReleaseChanged(parRtag_id,parOLDpv_id,enumRELEASE_CHANGE_MODE_PKG_REMOVED, true)
                Set objRC = Nothing
            End If

            If objEH.Finally Then
               Call Destroy_All_Objects
               Response.Redirect("fixed_issues.asp?rtag_id="& parRtag_id &"&pv_id="& NEWpv_id )
            End If
         End If
      Else
         Call RaiseMsg( enum_MSG_PACKAGE_VERSION_INVALID&"?rtag_id="& parRtag_id &"&pv_id="& parOLDpv_id &"", parFRnewver )
      End If

Else
    Response.write "Some mandatory parameters are missing!" & "<br>" 'TODO
    Response.write QSTR_FullQuery
End If ' If (parOLDpv_id <> "") AND ( (parFRnewver <> "") OR (parSetToPv_id <> "") ) AND (parRtag_id <> "") Then
%>
<!-- DESTRUCTOR ------->
<!--#include file="common/destructor.asp"-->