<%@LANGUAGE="VBSCRIPT"%> <% '===================================================== '| | '| DIFF | '| | '===================================================== %> <% Option explicit ' Good idea to set when using redirect Response.Expires = 0 ' always load the page, dont store %> <% 'To enable the script timeout to 20 mins Server.ScriptTimeout=1200 %> <% '------------ ACCESS CONTROL ------------------ %> <% '------------ Variable Definition ------------- Dim rsQry Dim objRelCollectorA Dim objRelCollectorB Dim parRtagA Dim parRtagB Dim dDiffFilter Dim colorA, colorB, ChangeTypeIcon Dim btnMerge, btnRemove Dim rowId Dim email Dim genReport Dim FSO Dim NewTextFile Dim pkgA, pkgB, pkgname, delimiter, rsQryA, rsQryB, rsQryCommentsA, rsQryCommentsB, sqlstrA, counterA, sqlstrB, counterB Dim SSsql, retVal, rsCQ, DEVIiss Dim a, b, c, d, pkgversion, errormsg, ChangeASource, ChangeAUpdate, ChangeBSource, ChangeBUpdate, pvCollectionA, pvCollectionB Dim source_change, scFlag Dim changeType Dim pendingAdditions '------------ Constants Declaration ----------- Const LIMG_UPDATED = "" Const LIMG_RIPPLED = "" Const LIMG_ADDED = "" Const LIMG_REMOVED = "" Const LIMG_FILTER_ON = "" Const LIMG_FILTER_OFF = "" Const LIMG_DROP_DOWN_ARROW = "" Const LCOLOR_NOT_CHANGED = "#F5F5F5" Const LCOLOR_CHANGED = "#d2f7c9" Const LCOLOR_RIPPLED = "#D8F8F8" Const LCOLOR_BLANK = "#FFFFFF" Const LIMG_MERGE = "" Const LIMG_MERGE_WARN = "" Const LIMG_REMOVE = "" Const LIMG_UNDO = "" '------------ Variable Init ------------------- Set rsCQ = Server.CreateObject("ADODB.Recordset") parRtagA = Request("rtagA") parRtagB = Request("rtagB") Set objRelCollectorA = CreateObject("Scripting.Dictionary") Set objRelCollectorB = CreateObject("Scripting.Dictionary") Set dDiffFilter = CreateObject("Scripting.Dictionary") Set pendingAdditions = CreateObject("Scripting.Dictionary") '---------------------------------------------- If Request("btn") = "Mail Me Report" Then email = true genReport = true End If If Request("btn") = "Show Me Report" Then genReport = true End If %> <% '-------------------------------------------------------------------------------------------------------------------------- Sub GetDiffFilterValues ( outDepFilter ) Dim FilterVal, aFilterValues If Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) <> "" Then aFilterValues = Split( Replace( Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER), " ", ""), ",") For Each FilterVal In aFilterValues outDepFilter.Item (CStr( FilterVal )) = "" Next End If End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub Javascript() NewTextFile.WriteLine("") End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub GetFixedIssues(pv_id) ' ' Clearcase issues ' Set sqlstrA = OraDatabase.DbCreateDynaset("SELECT iss_db, iss_id, iss_state, notes FROM CQ_ISSUES WHERE pv_id="& pv_id &" AND iss_state = "& enumISSUES_STATE_FIXED, cint(0)) If sqlstrA.RecordCount <> 0 Then NewTextFile.WriteLine() NewTextFile.WriteLine("
Fixed ClearQuest Issues:
") NewTextFile.WriteLine("
") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") For counterA=1 to sqlstrA.RecordCount DEVIiss = "-1" If CInt(sqlstrA("iss_db")) = CInt(enumCLEARQUEST_DEVI_ID) Then DEVIiss = DEVIiss &","& sqlstrA("iss_id") End If SSsql = ReadFile( rootPath & "queries\cq_issues.sql" ) SSsql = Replace( SSsql, "/*enumCLEARQUEST_DEVI_ID*/", enumCLEARQUEST_DEVI_ID) SSsql = Replace( SSsql, "/*DEVIiss*/", DEVIiss) retVal = Get_CQ_Issues ( SSsql, rsCQ ) NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") sqlstrA.MoveNext Next sqlstrA.Close() NewTextFile.WriteLine( "
Issue IdSummaryIssue TypePriorityStatus
"&rsCQ("iss_num")&""&NewLine_To_BR ( To_HTML ( rsCQ("summary") ) )&""&rsCQ("issue_type")&""&rsCQ("priority")&""&rsCQ("Status")&"
") End If ' ' Must also handle Jira Issues ' Dim SQLstr retVal = Get_JIRA_Package_Issues ( pv_id, SQLstr ) ' Debug ... NewTextFile.WriteLine("
Jira Issues:"&retVal&":"&pv_id&"
") If retVal > 0 Then retVal = Get_JIRA_Issues ( SQLstr, rsCQ ) If (retVal = 0 AND rsCQ.RecordCount > 0) Then NewTextFile.WriteLine() NewTextFile.WriteLine("
Jira Issues:
") NewTextFile.WriteLine("
") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") While ((NOT rsCQ.BOF) AND (NOT rsCQ.EOF)) NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") NewTextFile.WriteLine("") rsCQ.MoveNext Wend NewTextFile.WriteLine( "
Issue IdSummaryIssue TypePriorityStatusResolution
"&rsCQ("iss_num")&""&NewLine_To_BR ( To_HTML ( rsCQ("summary") ) )&""&rsCQ("issue_type")&""&rsCQ("priority")&""&rsCQ("Status")&""&rsCQ("RESOLUTION")&"
") End If rsCQ.Close() End If End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub LastPvIdA(a) Dim qryA Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&a, cint(0)) 'If a <> qryA("last_pv_id") Then a = qryA("last_pv_id") 'Else ' errormsg = true 'End If If pvCollectionA.Exists(CStr(a)) Then errormsg = true Exit Sub End If qryA.Close() End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub LastPvIdB(b) Dim qryB Set qryB = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&b, cint(0)) 'If b <> qryB("last_pv_id") Then b = qryB("last_pv_id") 'Else ' errormsg = true 'End If If pvCollectionB.Exists(CStr(b)) Then errormsg = true Exit Sub End If qryB.Close() End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub pkg_Version(pv) Dim qry Set qry = OraDatabase.DbCreateDynaset("SELECT PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&pv, cint(0)) pkgversion = qry("pkg_version") qry.Close() End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub LastPvIdAa(a) Dim qryA Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&a, cint(0)) c = qryA("last_pv_id") qryA.Close() End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub LastPvIdBb(b) Dim qryB Set qryB = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&b, cint(0)) d = qryB("last_pv_id") qryB.Close() End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub Comments(Pv_Id) Dim comments Set comments = OraDatabase.DbCreateDynaset("SELECT COMMENTS, PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&Pv_id, cint(0)) scFlag = false If comments("comments") <> "Rippled Build." Then NewTextFile.WriteLine("
Version: "& comments("pkg_version")&"
") If comments("comments") <> "" Then NewTextFile.WriteLine("
Comments:
") NewTextFile.WriteLine("
"& TextToHTML(comments("comments")) &"
") source_change = true scFlag = true End If End If End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub Release(pvId) Dim release Set release = OraDatabase.DbCreateDynaset("SELECT INSERT_STAMP FROM RELEASE_CONTENT WHERE PV_ID="&pvId, cint(0)) If release("insert_stamp") <> "" Then NewTextFile.Write(release("insert_stamp")) Else NewTextFile.Write("Version Not Used.") End If End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub Header() NewTextFile.WriteLine("") NewTextFile.WriteLine("") End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub Footer() NewTextFile.WriteLine("") NewTextFile.WriteLine("") End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub Styles() NewTextFile.WriteLine("") End Sub '-------------------------------------------------------------------------------------------------------------------------- Function GetIsDiffFilterInUseIcon() GetIsDiffFilterInUseIcon = LIMG_FILTER_OFF & LIMG_DROP_DOWN_ARROW If dDiffFilter.Count > 0 Then GetIsDiffFilterInUseIcon = LIMG_FILTER_ON & LIMG_DROP_DOWN_ARROW End If End Function '-------------------------------------------------------------------------------------------------------------------------- Function GetIsDiffFilterChecked( nFilterId ) If dDiffFilter.Exists ( CStr(nFilterId) ) Then GetIsDiffFilterChecked = "checked" End If End Function '--------------------------------------------------------------------------------------------------------------------------- Function Get_CQ_Issues ( SSsql, OOrsCQ ) If OOrsCQ.State = 1 Then OOrsCQ.Close End If On Error Resume Next OOrsCQ.ActiveConnection = CQ_conn OOrsCQ.Source = SSsql OOrsCQ.CursorType = 0 OOrsCQ.CursorLocation = 2 OOrsCQ.LockType = 3 OOrsCQ.Open() Get_CQ_Issues = Err.Number End Function '-------------------------------------------------------------------------------------------------------------------------- Public Function TextToHTML ( sString ) Dim mString If (sString = "") OR IsNull(sString) Then Exit Function mString = Server.HTMLEncode( sString ) mString = Replace(mString, VBNewLine, "
") TextToHTML = mString End Function '-------------------------------------------------------------------------------------------------------------------------- Sub GetFormDetails ( nSourceRtagId, ByRef outobjDetails ) Dim rsQry, query ' Exit if nSourceRtagId is empty If nSourceRtagId = "" Then Exit Sub OraDatabase.Parameters.Add "SOURCE_RTAG_ID", nSourceRtagId, ORAPARM_INPUT, ORATYPE_NUMBER query = _ " SELECT pr.PROJ_NAME ||' > '|| rt.RTAG_NAME AS LOCATION, "&_ " rt.OFFICIAL, pr.PROJ_ID, rt.RTAG_ID"&_ " FROM RELEASE_TAGS rt,"&_ " PROJECTS pr"&_ " WHERE rt.PROJ_ID = pr.PROJ_ID"&_ " AND rt.RTAG_ID = :SOURCE_RTAG_ID" Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT ) OraDatabase.Parameters.Remove "SOURCE_RTAG_ID" If rsQry.RecordCount > 0 Then outobjDetails.Item ("location") = rsQry("location") outobjDetails.Item ("official") = rsQry("official") outobjDetails.Item ("proj_id") = rsQry("proj_id") outobjDetails.Item ("rtag_id") = rsQry("rtag_id") Else Err.Raise 8, "Sub GetFormDetails in "& ScriptName, "Empty record set returned. nSourceRtagId="& nSourceRtagId End If rsQry.Close Set rsQry = Nothing End Sub '-------------------------------------------------------------------------------------------------------------------------- Sub GetDiffStateIcon( nDiffState, outIcon ) Select Case nDiffState Case "U" outIcon = LIMG_UPDATED Case "UW" outIcon = LIMG_UPDATED Case "A" outIcon = LIMG_ADDED Case "R" outIcon = LIMG_REMOVED Case "UR" outIcon = LIMG_RIPPLED Case Else outIcon = "" End Select End Sub '-------------------------------------------------------------------------------------------------------------------------- Function Get_Record_Count ( SSsql ) Dim rsTemp Set rsTemp = OraDatabase.DbCreateDynaset( "SELECT COUNT(*) as record_count FROM "& SSsql , cint(0)) If (NOT rsTemp.BOF) AND (NOT rsTemp.EOF) Then Get_Record_Count = rsTemp("record_count") Else Get_Record_Count = 0 End If rsTemp.Close Set rsTemp = nothing End Function '-------------------------------------------------------------------------------------------------------------------------- ' We need a way of discriminating between versions in the destination release that are pending, and those that are officially ' in the release. This function allows us to do that on the fly within the VBSCRIPT HTML generating code, indicating specifically ' if the given PV_ID reflects a pending additive merge. Function Is_Pending_Add(NNrtag_id, NNpv_id) If IsNull(NNrtag_id) OR IsNull(NNpv_id) Then Is_Pending_Add = 0 Else Is_Pending_Add = Get_Record_Count( "PLANNED pl WHERE pl.rtag_id = " & NNrtag_id & " AND pl.pv_id = " & NNpv_id & " AND pl.operation = 'A'" ) End If End Function '-------------------------------------------------------------------------------------------------------------------------- ' We need a way of discriminating between versions in the destination release that are pending, and those that are officially ' in the release. This function allows us to do that on the fly within the VBSCRIPT HTML generating code, indicating specifically ' if the given PV_ID reflects a pending subtractive merge. Function Is_Pending_Sub(NNrtag_id, NNpv_id) If IsNull(NNrtag_id) OR IsNull(NNpv_id) Then Is_Pending_Sub = 0 Else Is_Pending_Sub = Get_Record_Count( "PLANNED pl WHERE pl.rtag_id = " & NNrtag_id & " AND pl.pv_id = " & NNpv_id & " AND pl.operation = 'S'" ) End If End Function '-------------------------------------------------------------------------------------------------------------------------- Sub MergePackages (releaseMode) Dim aFullList, aAddPkgList, aRemovePkgList, dAddPkgList, dRemovePkgList, PvId Dim OraParameter Dim rc ' Business Rules restricting the use of the merge feature... ' Bypass merge if the destination release is in closed or archive mode, or if user does not have ' merge permissions If releaseMode <> enumDB_RELEASE_IN_CLOSED_MODE AND releaseMode <> enumDB_RELEASE_IN_ARCHIVE_MODE _ AND (objAccessControl.IsActive("MergeRelease")) THEN Set dAddPkgList = CreateObject("Scripting.Dictionary") Set dRemovePkgList = CreateObject("Scripting.Dictionary") '--- Get Add Packages --- ' Get full list of "addpkg" parameter aFullList = Split ( Replace( Request("addpkg"), " ", "" ), "," ) ' Clean empty parameters For Each PvId In aFullList If PvId <> "" Then dAddPkgList.Add CStr( PvId ), Empty End If Next aFullList = NULL aAddPkgList = dAddPkgList.Keys '--- Get Remove Packages --- ' Get full list of "removepkg" parameter aFullList = Split ( Replace( Request("removepkg"), " ", "" ), "," ) ' Clean empty parameters For Each PvId In aFullList If PvId <> "" Then dRemovePkgList.Add CStr( PvId ), Empty End If Next aFullList = NULL aRemovePkgList = dRemovePkgList.Keys '-- Add package List to release -- OraDatabase.Parameters.Add "PV_ID", NULL, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "VIEW_ID", NULL, ORAPARM_BOTH, ORATYPE_NUMBER OraDatabase.Parameters.Add "RTAG_A", Request("rtagA"), ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "RTAG_B", Request("rtagB"), ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "PROJB", objRelCollectorB.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "COMMENTS", "Merging from "& objRelCollectorA.Item("location") &" to "& objRelCollectorB.Item("location"), ORAPARM_INPUT, ORATYPE_VARCHAR2 OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "OPERATION",NULL, ORAPARM_INPUT, ORATYPE_CHAR Set OraParameter = OraDatabase.Parameters On Error Resume Next ' Begin Database entry objEH.TryORA ( OraSession ) '-- Add Packages -- OraParameter("OPERATION").Value = "A" For Each PvId In aAddPkgList OraParameter("PV_ID").Value = PvId ' DEVI-45275, Merge into Planned (pending) table instead of release_content table. If Err.Number = 0 Then OraDatabase.ExecuteSQL _ "BEGIN "&_ " :VIEW_ID := PK_RELEASE.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_A ); "&_ " PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION ); "&_ "END;" End If Next '-- Remove Packages -- If Err.Number = 0 Then OraParameter("OPERATION").Value = "S" For Each PvId In aRemovePkgList OraParameter("PV_ID").Value = PvId If Err.Number = 0 Then ' Does this PV_ID exist in the destination release's planned table? rc = Get_Record_Count ("PLANNED pl WHERE pl.pv_id = " & PvId & " AND pl.rtag_id = " & Request("rtagB") ) If rc > 0 Then ' Given that merging now merges into pending, the merge page may be used to remove items that have ' previously been merged but have not yet been committed to the destination release. For these, ' we cannot call PK_RELEASE.GET_PACKAGE_VIEW(). We have to call PK_PLANNED.GET_PACKAGE_VIEW() instead. OraDatabase.ExecuteSQL _ "BEGIN "&_ " :VIEW_ID := PK_PLANNED.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_B ); "&_ " PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION ); "&_ "END;" Else ' DEVI-45275, Merge into Planned (pending) table instead of release_content table. OraDatabase.ExecuteSQL _ "BEGIN "&_ " :VIEW_ID := PK_RELEASE.GET_PACKAGE_VIEW ( :PV_ID, :RTAG_B ); "&_ " PK_PLANNED.MERGE_PACKAGE ( :PV_ID, :VIEW_ID, :RTAG_B, :USER_ID, :OPERATION ); "&_ "END;" End If End If Next '-- Log Project Merge Action If Err.Number = 0 Then OraDatabase.ExecuteSQL _ "BEGIN LOG_PROJECT_ACTION ( :PROJB, 'merge_release', :USER_ID, :COMMENTS, :RTAG_B ); END;" End If End If objEH.CatchORA ( OraSession ) ' sets up LastOraFailed as appropriate ' NOTE, The Touch_Release stored procedure does a commit itself, so we should not do it unless all the ExecuteSQL's we ' have just performed, were successful If objEH.LastOraFailed = FALSE Then '-- Force package state recalculate objEH.TryORA ( OraSession ) OraDatabase.ExecuteSQL _ "BEGIN "&_ " TOUCH_RELEASE ( :RTAG_B ); "&_ "END;" objEH.CatchORA ( OraSession ) End If Set OraParameter = Nothing OraDatabase.Parameters.Remove "PV_ID" OraDatabase.Parameters.Remove "VIEW_ID" OraDatabase.Parameters.Remove "RTAG_A" OraDatabase.Parameters.Remove "RTAG_B" OraDatabase.Parameters.Remove "USER_ID" OraDatabase.Parameters.Remove "PROJB" OraDatabase.Parameters.Remove "COMMENTS" OraDatabase.Parameters.Remove "OPERATION" 'Response.write "
"& sAddPkgList &"-"& dAddPkgList.Count &"-"& UBound( aFullList ) End If End Sub '-------------------------------------------------------------------------------------------------------------------------- Function AddTrailingZeros(byval n, byval count) if len(n) >= count then AddTrailingZeros = n exit function end if dim c, s, i c = count - len(n) for i = 1 to c s = s & "0" next s = cstr(n) & s AddTrailingZeros = s End function '---------------------------------------------------------------------------------------------------------------------------------------- ' Function returns the number of imported jira issues ' and builds a string suitable for querying the jira issues database Function Get_JIRA_Package_Issues ( NNpv_id, SSsql ) Dim rsTemp, sqlstr, JIRAIss, retVal JIRAIss = "'-1'" sqlstr = "SELECT iss_key FROM JIRA_ISSUES WHERE pv_id="& NNpv_id Set rsTemp = OraDatabase.DbCreateDynaset( sqlstr, cint(0)) retVal = rsTemp.RecordCount While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF)) JIRAIss = JIRAIss &",'"& rsTemp("iss_key")&"'" rsTemp.MoveNext WEnd SSsql = "SELECT I.pkey AS iss_num, I.summary, ISS.pname AS Status, IT.pname as issue_type, PR.pname as Priority, R.PNAME as RESOLUTION"&_ " FROM jiraissue I, issuestatus ISS, issuetype IT, resolution R, priority PR "&_ " WHERE I.pkey IN ("& JIRAIss &") "&_ " AND I.issuestatus = ISS.ID "&_ " AND I.RESOLUTION = R.ID "&_ " AND IT.ID = I.issuetype "&_ " AND PR.ID = I.PRIORITY " rsTemp.Close() Set rsTemp = nothing Get_JIRA_Package_Issues = retVal End Function '---------------------------------------------------------------------------------------------------------------------------------------- Function Get_JIRA_Issues ( SSsql, OOrsCQ ) If OOrsCQ.State = 1 Then OOrsCQ.Close() End If On Error Resume Next OOrsCQ.ActiveConnection = JIRA_conn OOrsCQ.Source = SSsql OOrsCQ.CursorType = 0 OOrsCQ.CursorLocation = 3 OOrsCQ.LockType = 3 OOrsCQ.Open() Get_JIRA_Issues = Err.Number End Function '-------------------------------------------------------------------------------------------------------------------------- %> <% '------------ RUN BEFORE PAGE RENDER ---------- If Request("btn") = "Exit" Then Call OpenInWindow ( "index.asp" ) End If ' Get release details Call GetFormDetails ( parRtagA, objRelCollectorA ) Call GetFormDetails ( parRtagB, objRelCollectorB ) If (Request("btn") = "Merge") Then Call MergePackages ( objRelCollectorB.Item("official") ) End If If Request("btn") = "Swap Compare" Then Call OpenInWindow ( ScriptName &"?rtagA="& parRtagB &"&rtagB="& parRtagA ) End If If Request("btn") = "Hide" Then ' Store filter in cookie Response.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) = Request("difilter") End If Call GetDiffFilterValues ( dDiffFilter ) '---------------------------------------------- %> Release Manager

<%If (parRtagA <> "") Then%> <%End If%>
 Select Release A
Go To Release A »

DIFF / MERGE RELEASE <%If genReport Then%>  [Generating Report] <%End If%>
 
<% ' %>
<%If (objRelCollectorB.Item("official") <> "Y" AND objRelCollectorB.Item("official") <> "C" ) AND (objAccessControl.IsActive("MergeRelease")) Then%> disabled<%End If%>> <%End If%> <%If (objRelCollectorB.Item("official") = "C" ) AND (objAccessControl.IsActive("MergeReleaseForCCB")) Then%> disabled<%End If%>> <%End If%>
<%If (parRtagA <> "") AND (parRtagB <> "")Then%>
<%=GetIsDiffFilterInUseIcon() %> Filter Results...
<%End If%>
<% ' Successfull Merge If (Request("btn") = "Merge") Then Call Messenger ( "Merge has completed successfully.", 3, "100%" ) End If Set FSO=Server.CreateObject("Scripting.FileSystemObject") Set NewTextFile=FSO.CreateTextFile(Server.MapPath("docs\compareReleases_"&objAccessControl.UserName&".html"), true) Call Header() If (parRtagA <> "") AND (parRtagB <> "")Then%> <% OraDatabase.Parameters.Add "RTAG_A", parRtagA, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "RTAG_B", parRtagB, ORAPARM_INPUT, ORATYPE_NUMBER OraDatabase.Parameters.Add "NO_CHANGE", GetIsDiffFilterChecked(enumDB_NUM_DIFF_NO_CHANGE), ORAPARM_INPUT, ORATYPE_VARCHAR2 OraDatabase.Parameters.Add "ADDED", GetIsDiffFilterChecked(enumDB_NUM_DIFF_NEW), ORAPARM_INPUT, ORATYPE_VARCHAR2 OraDatabase.Parameters.Add "UPDATED", GetIsDiffFilterChecked(enumDB_NUM_DIFF_UPDATED), ORAPARM_INPUT, ORATYPE_VARCHAR2 OraDatabase.Parameters.Add "REMOVED", GetIsDiffFilterChecked(enumDB_NUM_DIFF_REMOVED), ORAPARM_INPUT, ORATYPE_VARCHAR2 Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleaseDiff.sql"), cint(0)) OraDatabase.Parameters.Remove "RTAG_A" OraDatabase.Parameters.Remove "RTAG_B" OraDatabase.Parameters.Remove "NO_CHANGE" OraDatabase.Parameters.Remove "ADDED" OraDatabase.Parameters.Remove "UPDATED" OraDatabase.Parameters.Remove "REMOVED" Set rsQryA = OraDatabase.DbCreateDynaset( "SELECT RT.RTAG_NAME, PRJ.PROJ_NAME FROM RELEASE_TAGS RT, PROJECTS PRJ WHERE RTAG_ID="& parRtagA &" AND RT.PROJ_ID=PRJ.PROJ_ID", cint(0)) Set rsQryB = OraDatabase.DbCreateDynaset( "SELECT RT.RTAG_NAME, PRJ.PROJ_NAME FROM RELEASE_TAGS RT, PROJECTS PRJ WHERE RTAG_ID="& parRtagB &" AND RT.PROJ_ID=PRJ.PROJ_ID", cint(0)) Call Javascript() Call Styles() NewTextFile.WriteLine("Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"") NewTextFile.WriteLine("
Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"

") NewTextFile.WriteLine("Key:
") NewTextFile.WriteLine("SOURCE CODE CHANGES Indicates Changes to a Package in "& rsQryA("rtag_name") &".
") NewTextFile.WriteLine("SOURCE CODE CHANGES Indicates Changes to a Package in "& rsQryB("rtag_name") &".
") NewTextFile.WriteLine("Grey Text No Source Code Changes to a Package in either Release.") NewTextFile.WriteLine("
") NewTextFile.WriteLine("Toggle Sections:
") NewTextFile.WriteLine("Expand All") NewTextFile.WriteLine("Collapse All") NewTextFile.WriteLine("
") Dim currView_id currView_id = -1 While ((NOT rsQry.BOF) AND (NOT rsQry.EOF)) errormsg = false rowId = rsQry("pv_id_a") &"_"& rsQry("pv_id_b") btnMerge = LIMG_MERGE btnRemove = LIMG_REMOVE colorA = LCOLOR_NOT_CHANGED colorB = LCOLOR_NOT_CHANGED changeType = rsQry("change_type") Select Case changeType Case "U" colorA = LCOLOR_CHANGED colorB = LCOLOR_CHANGED Case "UW" colorA = LCOLOR_CHANGED colorB = LCOLOR_CHANGED btnMerge = LIMG_MERGE_WARN Case "UR" colorA = LCOLOR_RIPPLED colorB = LCOLOR_RIPPLED Case "A" colorA = LCOLOR_BLANK Case "R" colorB = LCOLOR_BLANK End Select Call GetDiffStateIcon ( changeType, ChangeTypeIcon ) If changeType = "U" OR changeType = "UW" OR changeType = "UR" Then Dim MajorA, MajorB, MinorA, MinorB, PatchA, PatchB, BuildA, BuildB, pos, pkgVersionA, pkgVersionB, majMinA, majMinB MajorA = NULL MajorB = NULL MinorA = NULL MinorB = NULL pkgVersionA = rsQry("pkg_version_a") pkgVersionB = rsQry("pkg_version_b") PatchA = rsQry("patch_number_a") PatchB = rsQry("patch_number_b") BuildA = rsQry("build_number_a") BuildB = rsQry("build_number_b") ' Find the first occurence of the dot in package version A pos = InStr(pkgVersionA, ".") If pos <> 0 Then ' Extract the Major Version for A MajorA = Mid(pkgVersionA, 1, pos - 1) ' Delete the Major Version Value from the string to get the minor and patch version pkgVersionA = Mid(pkgVersionA, pos + 1, Len(pkgVersionA)) ' Find the second occurence of the dot in package version A pos = InStr(pkgVersionA, ".") ' Extract the Minor Version for A If pos <> 0 Then MinorA = Mid(pkgVersionA, 1, pos - 1) End If End If ' Find the first occurence of the dot in package version B pos = InStr(pkgVersionB, ".") If pos <> 0 Then ' Extract the Major Version for B MajorB = Mid(pkgVersionB, 1, pos - 1) ' Delete the Major Version Value from the string to get the minor and patch version pkgVersionB = Mid(pkgVersionB, pos + 1, Len(pkgVersionB)) ' Find the second occurence of the dot in package version B pos = InStr(pkgVersionB, ".") ' Extract the Minor Version for B If pos <> 0 Then MinorB = Mid(pkgVersionB, 1, pos - 1) End If End If If MajorA = MajorB Then If MinorA = MinorB Then If IsNumeric(PatchA) AND IsNumeric(PatchB) Then If CInt(PatchB) > CInt(PatchA) Then btnMerge = LIMG_MERGE_WARN Else btnMerge = LIMG_MERGE End If End If Else If IsNumeric(MinorA) AND IsNumeric(MinorB) Then If CInt(MinorB) > CInt(MinorA) Then btnMerge = LIMG_MERGE_WARN Else btnMerge = LIMG_MERGE End If End If End If Else If IsNumeric(MajorA) AND IsNumeric(MajorB) Then If CInt(MajorB) > CInt(MajorA) Then btnMerge = LIMG_MERGE_WARN Else btnMerge = LIMG_MERGE End If End If End If End If ' -------- FILTERS RIPPLE BUILDS WHEN CHECKED ----------------- If NOT (GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE) = "checked" AND changeType = "UR") THEN ' -------- GROUP BY BASE VIEW ----------------- If CDbl(currView_id) <> CDbl(rsQry("view_id")) Then%> <% currView_id = CDbl(rsQry("view_id")) End If ' -------- END GROUP ------------------------ %> <% 'Determine if we are dealing with a PV_ID that we have already encountered and displayed as a pending addition 'If we are, we do not need to display anything more about it, so skip the row. ' NOTE. the result set is sorted by change type (see releasediff.sql) such that if there are multiple entries ' for the same PV_ID, they are sorted in the following order: unchanged, additions, removals, updates. ' This is important to the row skip filtering carried out below. Dim skipRow If rsQry("pv_id_a") Then skipRow = pendingAdditions.Exists(CStr(rsQry("pv_id_a"))) Else skipRow = FALSE End If %> <%If NOT skipRow Then%> <%End If %> <% If genReport AND NOT skipRow Then If rsQry("pv_id_a") Then Set rsQryCommentsA = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_a"), cint(0)) End If If rsQry("pv_id_b") Then Set rsQryCommentsB = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_b"), cint(0)) End If pkgA = rsQry("pkg_name_a") pkgB = rsQry("pkg_name_b") If pkgA <> "" then pkgname = pkgA Else pkgname = pkgB End If If changeType = "U" OR changeType = "UW" Then ChangeASource = false ChangeAUpdate = false ChangeBSource = false ChangeBUpdate = false 'NewTextFile.WriteLine("
"&pkgname&"") NewTextFile.Write(""& pkgname &"") NewTextFile.WriteLine("
") NewTextFile.Write(rsQryA("rtag_name")&" uses: "&rsQry("pkg_version_a")&" (") Call Release(rsQry("pv_id_a")) NewTextFile.WriteLine(")
") NewTextFile.Write(rsQryB("rtag_name")&" uses: "&rsQry("pkg_version_b")&" (") Call Release(rsQry("pv_id_b")) NewTextFile.WriteLine(")
") a = rsQry("pv_id_a") b = rsQry("pv_id_b") c = rsQry("pv_id_a") d = rsQry("pv_id_b") Set pvCollectionA = CreateObject("Scripting.Dictionary") Set pvCollectionB = CreateObject("Scripting.Dictionary") On Error Resume Next While CLng(a) <> CLng(b) and NOT errormsg 'NewTextFile.WriteLine("A: "&a) 'NewTextFile.WriteLine("B: "&b) pvCollectionA.Add CStr(a), Empty pvCollectionB.Add CStr(b), Empty If CLng(a) > CLng(b) Then 'NewTextFile.WriteLine("TestA") Call LastPvIdA(a) ElseIf CLng(b) > CLng(a) Then 'NewTextFile.WriteLine("TestB") Call LastPvIdB(b) End If Wend Set pvCollectionA = Nothing Set pvCollectionB = Nothing Call pkg_Version(a) NewTextFile.Write("Common PARENT package version: "&pkgversion&" (") Call Release(a) NewTextFile.WriteLine(")

") NewTextFile.WriteLine() NewTextFile.WriteLine(""&rsQryA("rtag_name")&"") If pkgversion <> rsQry("pkg_version_a") Then NewTextFile.WriteLine("
Versions between "& pkgversion &" and "& rsQry("pkg_version_a")&"
") If errormsg Then NewTextFile.WriteLine("Error determining root!
") NewTextFile.WriteLine() End If source_change = false While CLng(a) <> CLng(c) and NOT errormsg Call Comments(c) If scFlag = TRUE Then Call GetFixedIssues(c) End If Call LastPvIdAa(c) NewTextFile.WriteLine() Wend If source_change = false Then NewTextFile.WriteLine("
No source changes to "& rsQryA("rtag_name")&". Only Rippled Builds.

") ChangeASource = true End If Call pkg_Version(b) NewTextFile.WriteLine() NewTextFile.WriteLine() ElseIf pkgversion = rsQry("pkg_version_a") Then NewTextFile.WriteLine("
No updates to "& rsQryA("rtag_name")&"

") ChangeAUpdate = true NewTextFile.WriteLine() End If NewTextFile.WriteLine(""&rsQryB("rtag_name")&"") If pkgversion <> rsQry("pkg_version_b") Then NewTextFile.WriteLine("
Versions between "& pkgversion &" and "& rsQry("pkg_version_b")&"
") If errormsg Then NewTextFile.WriteLine("Error determining root!
") NewTextFile.WriteLine() End If source_change = false While CLng(b) <> CLng(d) and NOT errormsg Call Comments(d) If scFlag = TRUE Then Call GetFixedIssues(d) End If Call LastPvIdBb(d) NewTextFile.WriteLine() Wend If source_change = false Then NewTextFIle.WriteLine("
No source changes to "& rsQryB("rtag_name")&". Only Rippled Builds.

") ChangeBSource = true End If ElseIf pkgversion = rsQry("pkg_version_b") Then NewTextFile.WriteLine("
No updates to "& rsQryB("rtag_name")&"

") ChangeBUpdate = true NewTextFile.WriteLine() End If NewTextFile.WriteLine("
") If ChangeASource Then If ChangeBSource Then NewTextFile.WriteLine("
<%= ReleaseIcon(objRelCollectorA.Item("official")) & objRelCollectorA.Item("location")%> <%= ReleaseIcon(objRelCollectorB.Item("official")) & objRelCollectorB.Item("location")%>
<%=rsQry("view_name")%>          
<%=rsQry("pkg_name_a") &" "& rsQry("pkg_version_a")%>
<%If objRelCollectorB.Item("official") <> "Y" Then%> <%End If%>
<%=ChangeTypeIcon%>
<%If objRelCollectorB.Item("official") <> "Y" Then%> <%End If%>
<%If IsNull(rsQry("pv_id_b")) Then %> <%If Is_Pending_Sub(Request("rtagB"), rsQry("pv_id_a")) Then%> (removal pending<%=Quick_Help("RemovalPending")%>) <%End If %> <%Else%> <%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%> <%If Is_Pending_Add(Request("rtagB"), rsQry("pv_id_b")) Then%> (addition pending<%=Quick_Help("AdditionPending")%>) <% 'Add this pending addition to the dictionary so that we can filter out REMOVED entries 'with identical PV_ID's that we might encounter further on in the result set If NOT pendingAdditions.Exists(rsQry("pv_id_b")) Then pendingAdditions.Add CStr(rsQry("pv_id_b")), CStr(rsQry("pkg_version_b")) End If%> <%ElseIf Is_Pending_Sub(Request("rtagB"), rsQry("pv_id_b")) Then%> (removal pending<%=Quick_Help("RemovalPending")%>) <%End If %> <%End If %>
">
"& Ucase(rsQryA("rtag_name")) &": . Ripple Builds Only."& Ucase(rsQryB("rtag_name")) &": Ripple Builds Only.
") ElseIf ChangeBUpdate Then NewTextFile.WriteLine("
"& Ucase(rsQryA("rtag_name")) &": Ripple Builds Only."& Ucase(rsQryB("rtag_name")) &": No Updates.
") ElseIf NOT ChangeBSource AND NOT ChangeBUpdate Then NewTextFile.WriteLine("
"& Ucase(rsQryA("rtag_name")) &": Ripple Builds Only. "& Ucase(rsQryB("rtag_name")) &": SOURCE CODE CHANGES.
") End If End If If ChangeBSource Then If NOT ChangeAUpdate Then If NOT ChangeASource AND NOT ChangeBUpdate Then NewTextFile.WriteLine("
"& Ucase(rsQryA("rtag_name")) &": SOURCE CODE CHANGES. "& Ucase(rsQryB("rtag_name")) &": Ripple Builds Only.
") End If End If End If If NOT ChangeASource Then If NOT ChangeAUpdate Then If NOT ChangeBSource AND NOT ChangeBUpdate Then NewTextFile.WriteLine("
"& Ucase(rsQryA("rtag_name")) &": SOURCE CODE CHANGES."& Ucase(rsQryB("rtag_name")) &": SOURCE CODE CHANGES.
") ElseIf ChangeBUpdate Then NewTextFile.WriteLine("
"& Ucase(rsQryA("rtag_name")) &": SOURCE CODE CHANGES. "& Ucase(rsQryB("rtag_name")) &": No Updates.
") End If ElseIf ChangeAUpdate Then If NOT ChangeBSource AND NOT ChangeBUpdate Then NewTextFile.WriteLine("
"& Ucase(rsQryA("rtag_name")) &": No Updates. "& Ucase(rsQryB("rtag_name")) &": SOURCE CODE CHANGES.
") ElseIf ChangeBSource Then NewTextFile.WriteLine("
"& Ucase(rsQryA("rtag_name")) &": No Updates. "& Ucase(rsQryB("rtag_name")) &": Ripple Builds Only.
") End If End If End If End If 'changeType = "U" OR changeType = "UW" End If 'email End If 'NOT (GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE) = "checked" AND changeType = "UR") rsQry.MoveNext WEnd rsQry.Close Set rsQry = Nothing %> <% Call Footer() NewTextFile.Close Set NewTextFile=Nothing %>

<%Else%>
<% If (parRtagB <> "") Then Call Messenger ( "Select Release A to compare.", 3, "100%" ) ElseIf (parRtagA <> "") Then Call Messenger ( "Select Release B to compare.", 3, "100%" ) Else Call Messenger ( "Select Release A and Release B to compare.", 3, "100%" ) End If %> <%End If%>
 

<%If (parRtagB <> "") Then%> <%End If%>
 Select Release B
Go To Release B »
<% If email Then Dim LocalPath LocalPath = Server.MapPath("docs\compareReleases_"&objAccessControl.UserName&".html") Send_Email "Release Manager Notification",_ adminEmail, _ objAccessControl.UserEmail,_ "Release Comparisons from Release Manager", _ "Your requested report...",_ LocalPath End If %> <% Call Destroy_All_Objects %>