Subversion Repositories DevTools

Rev

Rev 165 | Rev 3621 | 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"-->
<%
' 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
'------------ Constants Declaration -----------
'------------ Variable Init -------------------
parOLDpv_id = QStrPar("OLDpv_id")
parFRnewver = QStrPar("FRnewver")
parSetToPv_id = QStrPar("pv_id")
parSync_rtags = Request("sync_rtags")

'----------------------------------------------
%>
<%
Sub New_Version ( SSnewver, NNorig_pv_id, NNSetToPv_id, NNrtag_id, sSyncRtags, retNEWpv_id )
   Dim cAlterReleaseWhileRestrictive, rsQry

   On Error Resume Next
   objEH.ErrorRedirect = TRUE

   If Request("build_type") = "A" Then
      SSnewver = ""
   End If

   OraDatabase.Parameters.Add "ORIG_PV_ID", NNorig_pv_id, ORAPARM_INPUT, ORATYPE_NUMBER

   If Request("build_type") = "M" Then
      ' Manual build
      OraDatabase.Parameters.Add "PKG_VERSION", SSnewver, ORAPARM_INPUT, ORATYPE_VARCHAR2
   Else
      ' Automated Build
      OraDatabase.Parameters.Add "PKG_VERSION", Request("v_ext"), ORAPARM_INPUT, ORATYPE_VARCHAR2
   End If

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

   OraDatabase.Parameters.Add "BUILD_TYPE",                Request("build_type"),         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 )

   Set rsQry = OraDatabase.DbCreateDynaset("SELECT * FROM RELEASE_CONTENT WHERE RTAG_ID ="& Request("rtag_id") &" AND PV_ID = "& NNorig_pv_id &"", cint(0))

   If (NOT IsNull(rsQry("pkg_id"))) AND rsQry("pkg_state") = 6  Then

      Dim rsPv_id

      If (SSnewver) <> ""  Then

         Set rsPv_id = OraDatabase.DbCreateDynaset("SELECT * FROM PACKAGE_VERSIONS WHERE PKG_VERSION ='"& SSnewver &"' AND PKG_ID = "& rsQry("pkg_id") &"", cint(0))

         retNEWpv_id =  rsPv_id("pv_id")

         rsPv_id.Close()
         Set rsPv_id = nothing
      Else
         retNEWpv_id = NNSetToPv_id
      End If
      If NOT IsNull(retNewpv_id) Then
         OraDatabase.ExecuteSQL _
         "BEGIN "&_
         " UPDATE RELEASE_CONTENT SET PV_ID ="& retNEWpv_id &" WHERE RTAG_ID ="& Request("rtag_id") &" AND PV_ID ="& Request("OLDpv_id")&"; "&_
         "END;"
      Else
         OraDatabase.ExecuteSQL _
         "BEGIN "&_
         " PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_
         "                    :PKG_VERSION,"&_
         "                    :BUILD_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;"

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

        Call UpdateSubVersionSrcPath(retNEWpv_id)

      End If
   Else
      OraDatabase.ExecuteSQL _
      "BEGIN "&_
      " PK_PACKAGE.NEW_VERSION ( :ORIG_PV_ID, "&_
      "                    :PKG_VERSION,"&_
      "                    :BUILD_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;"

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

      Call UpdateSubVersionSrcPath(retNEWpv_id)

   End If

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

   rsQry.Close()
   Set rsQry = nothing

   OraDatabase.Parameters.Remove "ORIG_PV_ID"
   OraDatabase.Parameters.Remove "ALTER_RELEASE"
   OraDatabase.Parameters.Remove "PKG_VERSION"
   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$"

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

   If Request("build_type") = "A" Then
      SanityCheck = True
   End If

   Set objRegEx = Nothing
   Set objRegEx2 = Nothing
End Function

'---------------------------------------------------------------
'Returns a new subversion package source path string by replacing or adding
'the specified label to the specified subversion package source path string.
Function  GetNewSvnSrcPath(asrc_path, alabel)
  Dim ssrc_base
  Dim snew_src_path
  Dim ssrc_path
  Dim slast_char
  Dim i,j

  if IsNull(asrc_path) then
    ssrc_path = ""
  else
    ssrc_path = asrc_path
  end if
  
  'get project directory from current package source path, ie path above either "tags" or "branches" or "trunk" directory
  i = InStrRev(LCase(ssrc_path), "/tags")
  if i = 0 then
    i = InStrRev(LCase(ssrc_path), "/branches")
    if i = 0 then
      i = InStrRev(LCase(ssrc_path), "/trunk")
    end if
  end if
  
  if i = 0 then
    '"tags" or "branches" or "trunk" not found
    'use current package source path as the project directory
    ssrc_base = ssrc_path
      
    'ensure project directory ends in a slash
    j = Len(ssrc_base)
    slast_char = Right(ssrc_base,1)
    if (j > 0) and (slast_char <> "/") then
      ssrc_base = ssrc_base & "/"
    end if
  else
    '"tags" or "branches" or "trunk" found so extract project directory
    ssrc_base = Mid(ssrc_path,1,i)
  end if

  'append new directory to the default project directory string.
  'the default path will be <project directory>/branches/<label>
  snew_src_path = ssrc_base & "branches/" & alabel
    
  GetNewSvnSrcPath = snew_src_path
  
End Function

'------------------------------------------------------------------
'This function is used to create the default package source path
'string when a new SubVersion package version is added.
'Assumes the specified pv_id is for a subversion package
Sub UpdateSubVersionSrcPath(apv_id)
  Dim rsQry
  Dim anew_src_path
  Dim ivcs_type_id
  Dim apkg_label
  Dim asrc_path
  Dim ssql

  'select the package and ensure it is a subversion package
  ssql = "SELECT * FROM PACKAGE_VERSIONS WHERE PV_ID ="& apv_id &" AND VCS_TYPE_ID=23"
 
  Set rsQry = OraDatabase.DbCreateDynaset(ssql, cint(0))

  If rsQry.RecordCount > 0 Then
    ivcs_type_id = rsQry("vcs_type_id")
    'pkg_label contains the new auto generated label for this version
    apkg_label = rsQry("pkg_label")
    asrc_path = rsQry("src_path")
    anew_src_path = GetNewSvnSrcPath(asrc_path,apkg_label)

    OraDatabase.ExecuteSQL _
      "BEGIN "&_
      " UPDATE PACKAGE_VERSIONS SET SRC_PATH ='"& anew_src_path &"' WHERE PV_ID ="& apv_id &"; "&_
      "END;"
  End If

  rsQry.Close()
  Set rsQry = nothing
  
End Sub

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

'--- Process submission ---
   If (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 Request("build_type") = "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 Request("build_type") = "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, parSync_rtags, NEWpv_id )

            If objEH.Finally Then
               Response.Redirect("dependencies.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_All
   End If ' If (parOLDpv_id <> "") AND ( (parFRnewver <> "") OR (parSetToPv_id <> "") ) AND (parRtag_id <> "") Then
%>

<!-- DESTRUCTOR ------->
<!--#include file="common/destructor.asp"-->