Rev 7063 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<%@LANGUAGE="VBSCRIPT"%><%'====================================================='|'| diff.asp'|'=====================================================%><%Option explicit' Good idea to set when using redirectResponse.Expires = 0 ' always load the page, dont store%><%'To enable the script timeout to 20 minsServer.ScriptTimeout=1200%><!--#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/_form_window_common.asp"--><%'------------ ACCESS CONTROL ------------------%><!--#include file="_access_control_login.asp"--><!--#include file="_access_control_general.asp"--><SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT><SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/base64encode.vbs"></SCRIPT><SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/jiraIssues.vbs"></SCRIPT><%'------------ Variable Definition -------------Dim rsQryDim objRelCollectorADim objRelCollectorBDim parRtagADim parRtagBDim dDiffFilterDim colorA, colorB, ChangeTypeIconDim btnMerge, btnRemoveDim rowIdDim emailDim genReportDim reportPathDim FSODim NewTextFileDim pkgA, pkgB, pkgname, delimiter, rsQryA, rsQryB, rsQryCommentsA, rsQryCommentsB, sqlstrA, counterA, sqlstrB, counterBDim SSsql, retVal, rsCQ, DEVIissDim a, b, c, d, pkgversion, errormsg, ChangeASource, ChangeAUpdate, ChangeBSource, ChangeBUpdate, pvCollectionA, pvCollectionBDim source_change, scFlagDim changeTypeDim pkgSeenDim isaSdk ' Target is an SDK based packageDim isMergable ' Target package can be modified'------------ Constants Declaration -----------Const LIMG_PENDING = "<img src='data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Merge Pending'>"Const LIMG_UNCHANGED = "<img src='images/i_unchanged.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Unchanged'>"Const LIMG_UPDATED = "<img src='images/i_updated.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Updated'>"Const LIMG_OUTDATED = "<img src='images/i_outdated.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Possibly Outdated'>"Const LIMG_RIPPLED = "<img src='images/i_rippled.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Rippled'>"Const LIMG_ADDED = "<img src='images/i_added.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Added'>"Const LIMG_REMOVED = "<img src='images/i_removed.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Removed'>"Const LIMG_FILTER_ON = "<img src='images/i_data_table.gif' border='0' align='absmiddle' hspace='0' title='Filter in use.'>"Const LIMG_FILTER_OFF = "<img src='images/i_data_table_off.gif' border='0' align='absmiddle' hspace='0' title='Filter not in use.'>"Const LIMG_DROP_DOWN_ARROW = "<img src='images/i_drop_down_arrow.gif' width='5' height='15' hspace='1' border='0' align='absmiddle'>"Const LCOLOR_NOT_CHANGED = "#F5F5F5"Const LCOLOR_CHANGED = "#d2f7c9"Const LCOLOR_OUTDATED = "#ffd292"Const LCOLOR_RIPPLED = "#D8F8F8"Const LCOLOR_BLANK = "#FFFFFF"Const LIMG_MERGE = "<img src='images/bt_move_all_right.gif' title='Click to merge.' border='0'>"Const LIMG_MERGE_WARN = "<img src='images/bt_move_warn_right.gif' title='Right hand side version is newer.' border='0'>"Const LIMG_REMOVE = "<img src='images/bt_remove.gif' title='Remove this version from release.' border='0'>"Const LIMG_UNDO = "<img src='images/bt_undo.gif' title='Undo merge/remove.' border='0'>"Const LIMG_SDK = "<img src='images/i_sdkpkg.png' width='18' height='18' border='0' title='Package is imported from an SDK and cannot be modified'>"'------------ Variable Init -------------------parRtagA = Request("rtagA")parRtagB = Request("rtagB")Set objRelCollectorA = CreateObject("Scripting.Dictionary")Set objRelCollectorB = CreateObject("Scripting.Dictionary")Set dDiffFilter = CreateObject("Scripting.Dictionary")Set pkgSeen = CreateObject("Scripting.Dictionary")'----------------------------------------------If Request("btn") = "Mail Me Report" Thenemail = truegenReport = trueEnd IfIf Request("btn") = "Show Me Report" ThengenReport = trueEnd IfIf genReport ThenreportPath = Server.MapPath("docs\compareReleases_"&objAccessControl.UserName&".html")End If'--------------------------------------------------------------------------------------------------------------------------Sub GetDiffFilterValues ( outDepFilter )Dim FilterVal, aFilterValuesIf Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) <> "" ThenaFilterValues = Split( Replace( Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER), " ", ""), ",")For Each FilterVal In aFilterValuesoutDepFilter.Item (CStr( FilterVal )) = ""NextEnd IfEnd Sub'--------------------------------------------------------------------------------------------------------------------------Sub Javascript()NewTextFile.WriteLine("<script language=""JavaScript"" type=""text/javascript"">")NewTextFile.WriteLine("function MM_findObj(n, d) { //v4.0")NewTextFile.WriteLine(" var p,i,x;")NewTextFile.WriteLine(" if(!d) d=document; ")NewTextFile.WriteLine(" if((p=n.indexOf(""?""))>0&&parent.frames.length) {")NewTextFile.WriteLine(" d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);")NewTextFile.WriteLine(" }")NewTextFile.WriteLine(" if(!(x=d[n])&&d.all) x=d.all[n]; ")NewTextFile.WriteLine(" for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];")NewTextFile.WriteLine(" for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);")NewTextFile.WriteLine(" if(!x && document.getElementById) x=document.getElementById(n); ")NewTextFile.WriteLine(" return x;")NewTextFile.WriteLine("}")NewTextFile.WriteLine("function toggleSPAN(x) {")NewTextFile.WriteLine(" var el = MM_findObj('spanPkgInfo' + x);")NewTextFile.WriteLine(" if (el.style.display != ""block"") {")NewTextFile.WriteLine(" el.style.display = ""block"";")NewTextFile.WriteLine(" } else {")NewTextFile.WriteLine(" el.style.display = ""none"";")NewTextFile.WriteLine(" }")NewTextFile.WriteLine("}")NewTextFile.WriteLine("function MM_getElementsByClassName(cn) {")NewTextFile.WriteLine(" var allT=document.getElementsByTagName('*'), allCN=[], i=0, a;")NewTextFile.WriteLine(" while(a=allT[i++]) {")NewTextFile.WriteLine(" a.className==cn ? allCN[allCN.length]=a : null;")NewTextFile.WriteLine(" }")NewTextFile.WriteLine(" return allCN")NewTextFile.WriteLine("}")NewTextFile.WriteLine(" function MM_toggleAll(cn, show){")NewTextFile.WriteLine(" var allEl = MM_getElementsByClassName(cn);")NewTextFile.WriteLine(" for (var ii=0; ii<allEl.length;ii++){")NewTextFile.WriteLine(" var el = allEl[ii];")NewTextFile.WriteLine(" if(show) {")NewTextFile.WriteLine(" el.style.display = ""block"";")NewTextFile.WriteLine(" } else {")NewTextFile.WriteLine(" el.style.display = ""none"";")NewTextFile.WriteLine(" }")NewTextFile.WriteLine(" }")NewTextFile.WriteLine(" }")NewTextFile.WriteLine("</script>")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 ThenNewTextFile.WriteLine()NewTextFile.WriteLine("<blockquote><blockquote>Fixed ClearQuest Issues:</blockquote></blockquote>")NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")NewTextFile.WriteLine("<tr>")NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Id</td>")NewTextFile.WriteLine("<td width='55%' class='form_field'>Summary</td>")NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Type</td>")NewTextFile.WriteLine("<td width='15%' class='form_field'>Priority</td>")NewTextFile.WriteLine("<td width='10%' class='form_field'>Status</td>")NewTextFile.WriteLine("</tr>")For counterA=1 to sqlstrA.RecordCountDEVIiss = "-1"If CInt(sqlstrA("iss_db")) = CInt(enumCLEARQUEST_DEVI_ID) ThenDEVIiss = DEVIiss &","& sqlstrA("iss_id")End IfSSsql = 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("<tr>")NewTextFile.WriteLine("<td nowrap class='form_item'>"&rsCQ("iss_num")&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( rsCQ("summary") ) )&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("issue_type")&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("priority")&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("Status")&"</td>")NewTextFile.WriteLine("</tr>")sqlstrA.MoveNextNextsqlstrA.Close()NewTextFile.WriteLine( " </table></blockquote></blockquote></blockquote>")End If' Must also handle Jira IssuesOn Error Resume NextDim issueInfo, el, keySet issueInfo = CreateObject( "Scripting.Dictionary" )Call getJiraIssueDetails(pv_id, issueInfo, 1)If issueInfo.Count > 0 Then' Table HeaderNewTextFile.WriteLine()NewTextFile.WriteLine("<blockquote><blockquote>Jira Issues:</blockquote></blockquote>")NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")NewTextFile.WriteLine("<tr>")NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Id</td>")NewTextFile.WriteLine("<td width='58%' class='form_field'>Summary</td>")NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Type</td>")NewTextFile.WriteLine("<td width='10%' class='form_field'>Priority</td>")NewTextFile.WriteLine("<td width='8%' class='form_field'>Status</td>")NewTextFile.WriteLine("<td width='8%' class='form_field'>Resolution</td>")NewTextFile.WriteLine("</tr>")' Table BodyFor Each key In issueInfoSet el = issueInfo.item(key)NewTextFile.WriteLine("<tr>")NewTextFile.WriteLine("<td nowrap class='form_item'>"&key&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( el.item("summary") ) )&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&el.item("issuetype")&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&el.item("priority")&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&el.item("status")&"</td>")NewTextFile.WriteLine("<td class='form_item'>"&el.item("resolution")&"</td>")NewTextFile.WriteLine("</tr>")NextNewTextFile.WriteLine( " </table></blockquote></blockquote></blockquote>")Set issueInfo = nothingEnd IfEnd Sub'--------------------------------------------------------------------------------------------------------------------------Sub LastPvIdA(a)Dim qryASet qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&a, cint(0))'If a <> qryA("last_pv_id") Thena = qryA("last_pv_id")'Else' errormsg = true'End IfIf pvCollectionA.Exists(CStr(a)) Thenerrormsg = trueExit SubEnd IfqryA.Close()End Sub'--------------------------------------------------------------------------------------------------------------------------Sub LastPvIdB(b)Dim qryBSet qryB = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&b, cint(0))'If b <> qryB("last_pv_id") Thenb = qryB("last_pv_id")'Else' errormsg = true'End IfIf pvCollectionB.Exists(CStr(b)) Thenerrormsg = trueExit SubEnd IfqryB.Close()End Sub'--------------------------------------------------------------------------------------------------------------------------Sub pkg_Version(pv)Dim qrySet 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 qryASet 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 qryBSet 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 commentsSet comments = OraDatabase.DbCreateDynaset("SELECT COMMENTS, PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&Pv_id, cint(0))scFlag = falseIf comments("comments") <> "Rippled Build." ThenNewTextFile.WriteLine("<blockquote><blockquote><font color="&chr(34)&"blue"&chr(34)&">Version: "& comments("pkg_version")&"</font></blockquote></blockquote>")If comments("comments") <> "" ThenNewTextFile.WriteLine("<blockquote><blockquote>Comments: </blockquote></blockquote>")NewTextFile.WriteLine("<blockquote><blockquote><blockquote>"& TextToHTML(comments("comments")) &"</blockquote></blockquote></blockquote>")source_change = truescFlag = trueEnd IfEnd IfEnd Sub'--------------------------------------------------------------------------------------------------------------------------Sub Release(pvId)Dim releaseSet release = OraDatabase.DbCreateDynaset("SELECT INSERT_STAMP FROM RELEASE_CONTENT WHERE PV_ID="&pvId, cint(0))If release("insert_stamp") <> "" ThenNewTextFile.Write(release("insert_stamp"))ElseNewTextFile.Write("Version Not Used.")End IfEnd Sub'--------------------------------------------------------------------------------------------------------------------------Sub Header()NewTextFile.WriteLine("<html>")NewTextFile.WriteLine("<head>")End Sub'--------------------------------------------------------------------------------------------------------------------------Sub Footer()NewTextFile.WriteLine("</body>")NewTextFile.WriteLine("</html>")End Sub'--------------------------------------------------------------------------------------------------------------------------Sub Styles()NewTextFile.WriteLine("<style type="&chr(34)&"text/css"&chr(34)&">")NewTextFile.WriteLine("body { font-family:Verdana,Arial,Helvetica,sans-serif; }")NewTextFile.WriteLine("table { border-collapse:collapse; }")NewTextFile.WriteLine("table.fixed_issues td { border-width:1; border-style:solid; border-color:black; padding:3 5 3 5; }")NewTextFile.WriteLine(".fixed_issues { border-width:1; border-style:solid; border-color:black; }")NewTextFile.WriteLine(".page_title { color:red; font-size:110%; text-align:center; }")NewTextFile.WriteLine(".highlight_text { color:blue; }")NewTextFile.WriteLine(".form_field { background-color:#EAE5D7; font:bold 70% Tahoma,sans-serif; }")NewTextFile.WriteLine(".form_item { background-color:#EAE5D7; color:red; font:bold 70% Tahoma,sans-serif; vertical-align:top; }")NewTextFile.WriteLine(".pointer { cursor:pointer;text-decoration-style:solid; color:rgb(0, 0, 238)};")NewTextFile.WriteLine(".changesa { background-color:red; }")NewTextFile.WriteLine(".changesb { background-color:#FF9933; }")NewTextFile.WriteLine(".changesnone { color:#999999; }")NewTextFile.WriteLine(".texta { color:red; }")NewTextFile.WriteLine(".textb { color:#FF9933; }")NewTextFile.WriteLine(".textnone { color:#999999; }")NewTextFile.WriteLine("</style>")End Sub'--------------------------------------------------------------------------------------------------------------------------Function GetIsDiffFilterInUseIcon()GetIsDiffFilterInUseIcon = LIMG_FILTER_OFF & LIMG_DROP_DOWN_ARROWIf dDiffFilter.Count > 0 ThenGetIsDiffFilterInUseIcon = LIMG_FILTER_ON & LIMG_DROP_DOWN_ARROWEnd IfEnd Function'--------------------------------------------------------------------------------------------------------------------------Function GetIsDiffFilterChecked( nFilterId )If dDiffFilter.Exists ( CStr(nFilterId) ) ThenGetIsDiffFilterChecked = "checked"End IfEnd Function'---------------------------------------------------------------------------------------------------------------------------Function Get_CQ_Issues ( SSsql, OOrsCQ )On Error Resume NextSet OOrsCQ = OraDatabase.DbCreateDynaset( SSsql, cint(0))Get_CQ_Issues = Err.NumberEnd Function'--------------------------------------------------------------------------------------------------------------------------Public Function TextToHTML ( sString )Dim mStringIf (sString = "") OR IsNull(sString) Then Exit FunctionmString = Server.HTMLEncode( sString )mString = Replace(mString, VBNewLine, "<br>")TextToHTML = mStringEnd Function'--------------------------------------------------------------------------------------------------------------------------Sub GetFormDetails ( nSourceRtagId, ByRef outobjDetails )Dim rsQry, query' Exit if nSourceRtagId is emptyIf nSourceRtagId = "" Then Exit SubOraDatabase.Parameters.Add "SOURCE_RTAG_ID", nSourceRtagId, ORAPARM_INPUT, ORATYPE_NUMBERquery = _" 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 ThenoutobjDetails.Item ("location") = rsQry("location")outobjDetails.Item ("official") = rsQry("official")outobjDetails.Item ("proj_id") = rsQry("proj_id")outobjDetails.Item ("rtag_id") = rsQry("rtag_id")ElseErr.Raise 8, "Sub GetFormDetails in "& ScriptName, "Empty record set returned. nSourceRtagId="& nSourceRtagIdEnd IfrsQry.CloseSet rsQry = NothingEnd Sub'--------------------------------------------------------------------------------------------------------------------------Sub GetDiffStateIcon( nDiffState, outIcon )Select Case nDiffStateCase "U"outIcon = LIMG_UPDATEDCase "UW"outIcon = LIMG_OUTDATEDCase "A"outIcon = LIMG_ADDEDCase "R"outIcon = LIMG_REMOVEDCase "UR"outIcon = LIMG_RIPPLEDCase "B"outIcon = LIMG_UNCHANGEDCase ElseoutIcon = ""End SelectEnd Sub'--------------------------------------------------------------------------------------------------------------------------Function Get_Record_Count ( SSsql )Dim rsTempSet rsTemp = OraDatabase.DbCreateDynaset( "SELECT COUNT(*) as record_count FROM "& SSsql , cint(0))If (NOT rsTemp.BOF) AND (NOT rsTemp.EOF) ThenGet_Record_Count = rsTemp("record_count")ElseGet_Record_Count = 0End IfrsTemp.CloseSet rsTemp = nothingEnd Function'--------------------------------------------------------------------------------------------------------------------------Sub MergePackages ()Dim aFullList, aAddPkgList, aRemovePkgList, dAddPkgList, dRemovePkgList, PvIdDim OraParameterDim rcSet dAddPkgList = CreateObject("Scripting.Dictionary")Set dRemovePkgList = CreateObject("Scripting.Dictionary")'--- Get Add Packages ---' Get full list of "addpkg" parameteraFullList = Split ( Replace( Request("addpkg"), " ", "" ), "," )' Clean empty parametersFor Each PvId In aFullListIf PvId <> "" ThendAddPkgList.Add CStr( PvId ), EmptyEnd IfNextaFullList = NULLaAddPkgList = dAddPkgList.Keys'--- Get Remove Packages ---' Get full list of "removepkg" parameteraFullList = Split ( Replace( Request("removepkg"), " ", "" ), "," )' Clean empty parametersFor Each PvId In aFullListIf PvId <> "" ThendRemovePkgList.Add CStr( PvId ), EmptyEnd IfNextaFullList = NULLaRemovePkgList = dRemovePkgList.Keys'-- Add package List to release --OraDatabase.Parameters.Add "PV_ID", NULL, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "VIEW_ID", NULL, ORAPARM_BOTH, ORATYPE_NUMBEROraDatabase.Parameters.Add "RTAG_A", Request("rtagA"), ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "RTAG_B", Request("rtagB"), ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "PROJB", objRelCollectorB.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "COMMENTS", "Merging from "& objRelCollectorA.Item("location") &" to "& objRelCollectorB.Item("location"), ORAPARM_INPUT, ORATYPE_VARCHAR2OraDatabase.Parameters.Add "USER_ID", objAccessControl.UserId, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "OPERATION",NULL, ORAPARM_INPUT, ORATYPE_CHARSet OraParameter = OraDatabase.ParametersOn Error Resume Next' Begin Database entryobjEH.TryORA ( OraSession )'-- Add Packages --OraParameter("OPERATION").Value = "A"For Each PvId In aAddPkgListOraParameter("PV_ID").Value = PvId' DEVI-45275, Merge into Planned (pending) table instead of release_content table.If Err.Number = 0 ThenOraDatabase.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 IfNext'-- Remove Packages --If Err.Number = 0 ThenOraParameter("OPERATION").Value = "S"For Each PvId In aRemovePkgListOraParameter("PV_ID").Value = PvIdIf 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.OraDatabase.ExecuteSQL _"BEGIN "&_" PK_ENVIRONMENT.MAKE_REJECT ( :PV_ID, :RTAG_B, :USER_ID ); "&_"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 IfEnd IfNext'-- Log Project Merge ActionIf Err.Number = 0 ThenOraDatabase.ExecuteSQL _"BEGIN LOG_PROJECT_ACTION ( :PROJB, 'merge_release', :USER_ID, :COMMENTS, :RTAG_B ); END;"End IfEnd IfobjEH.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 successfulIf objEH.LastOraFailed = FALSE Then'-- Force package state recalculateobjEH.TryORA ( OraSession )OraDatabase.ExecuteSQL _"BEGIN "&_" TOUCH_RELEASE ( :RTAG_B ); "&_"END;"objEH.CatchORA ( OraSession )End IfSet OraParameter = NothingOraDatabase.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 "<br>"& sAddPkgList &"-"& dAddPkgList.Count &"-"& UBound( aFullList )End Sub'--------------------------------------------------------------------------------------------------------------------------Function AddTrailingZeros(byval n, byval count)if len(n) >= count thenAddTrailingZeros = nexit functionend ifdim c, s, ic = count - len(n)for i = 1 to cs = s & "0"nexts = cstr(n) & sAddTrailingZeros = sEnd function'--------------------------------------------------------------------------------------------------------------------------'------------ RUN BEFORE PAGE RENDER ----------If Request("btn") = "Exit" ThenCall OpenInWindow ( "index.asp" )End If' Get release detailsCall GetFormDetails ( parRtagA, objRelCollectorA )Call GetFormDetails ( parRtagB, objRelCollectorB )setActiveProject (objRelCollectorB.Item("proj_id"))isMergable = releaseIsMergable(objRelCollectorB.Item("official"))If (Request("btn") = "Merge") AND isMergable ThenCall MergePackages ()End If' Redirect, simply so that the URL get some nice argumentsIf Request("btn") = "Compare" ThenCall OpenInWindow ( ScriptName &"?rtagA="& parRtagA &"&rtagB="& parRtagB )End IfIf Request("btn") = "Swap Compare" ThenCall OpenInWindow ( ScriptName &"?rtagA="& parRtagB &"&rtagB="& parRtagA )End IfIf Request("btn") = "Refresh" Then' Store filter in cookieResponse.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) = Request("difilter")Call OpenInWindow ( ScriptName &"?rtagA="& parRtagA &"&rtagB="& parRtagB )End IfCall GetDiffFilterValues ( dDiffFilter )'----------------------------------------------Sub PanelA%><!-- SELECT RELEASE A ----------------------------------------------><table width="100%" border="0" cellspacing="10" cellpadding="0"><tr><td align="left" class="body_col"><img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13"> Select Release A<hr size="1px" color="Olive" noshade></td></tr><tr><td align="left"><select name="projA" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagA );"><option value="">-- Select Project --</option><%OraDatabase.Parameters.Add "PROJ_ID", objRelCollectorA.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBERSet rsQry = OraDatabase.DbCreateDynaset( GetQuery("ProjectsCombo.sql"), cint(0))OraDatabase.Parameters.Remove "PROJ_ID"While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%><option value="<%=rsQry("proj_id")%>" <%=rsQry("selected")%>><%=rsQry("proj_name")%></option><%rsQry.MoveNextWEndrsQry.CloseSet rsQry = Nothing%></select></td></tr><tr><td align="left"><select name="rtagA" id="rtagA" class="form_item"><%OraDatabase.Parameters.Add "PROJ_ID", objRelCollectorA.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "RTAG_ID", objRelCollectorA.Item("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBERSet rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))OraDatabase.Parameters.Remove "PROJ_ID"OraDatabase.Parameters.Remove "RTAG_ID"While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%><option value="<%=rsQry("rtag_id")%>" <%=rsQry("selected")%>><%=rsQry("rtag_name")%></option><%rsQry.MoveNextWEndrsQry.CloseSet rsQry = Nothing%></select></td></tr><%If (parRtagA <> "") Then%><tr><td align="left"><a href="dependencies.asp?rtag_id=<%=parRtagA%>" class="body_txt_drk">Go To Release A »</a></td></tr><%End If%><tr class="body_txt"><td><%If (parRtagA <> "") AND (parRtagB <> "")Then%><!-- DIFF FILTER +++++++++++++++++++++++++++++++++++++++++++ --><p> <fieldset style="width:200px;" onclick="filterClicked(event);"><legend class="body_txt"><%=GetIsDiffFilterInUseIcon() %> Filter Results...</legend><table width="100%" border="0" cellspacing="2" cellpadding="0" id=filterTable class="body_txt"><tr ><td><input id="filterFipper" name="difilter" type="checkbox" onclick="toggleFilters();"></td><td colspan=1>Hide the marked change types.</td></tr><tr><td width="1"><input name="difilter" type="checkbox" value="<%=enumDB_NUM_DIFF_UPDATED%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_UPDATED)%>></td><td width="50" nowrap class="form_field"><%=LIMG_UPDATED%>Updated</td></tr><tr><td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_WARN%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_WARN)%>></td><td nowrap class="form_field"><%=LIMG_OUTDATED%>Updated with Warning</td></tr><tr><td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_NEW%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_NEW)%>></td><td nowrap class="form_field"><%=LIMG_ADDED%>Added</td></tr><tr><td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_REMOVED%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_REMOVED)%>></td><td nowrap class="form_field"><%=LIMG_REMOVED%>Removed</td></tr><tr><td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_RIPPLE%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE)%>></td><td nowrap class="form_field"><%=LIMG_RIPPLED%>Rippled</td></tr><tr><td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_NO_CHANGE%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_NO_CHANGE)%>></td><td nowrap class="form_field"><%=LIMG_UNCHANGED%>Unchanged</td></tr><tr><td><input type="checkbox" name="difilter" value="<%=enumDB_NUM_DIFF_PENDING%>" <%=GetIsDiffFilterChecked(enumDB_NUM_DIFF_PENDING)%>></td><td nowrap class="form_field"><%=LIMG_PENDING%>Pending</td></tr><tr><td> </td><td width="100%"><input id=difilterBtn name="btn" type="submit" class="form_btn" value="Refresh" disabled="true"></td></tr></table><img src onerror='initFilter();'></fieldset><!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ --><%End If%></td><td></td></tr></table><!-- SELECT RELEASE A END ----------------------------------------------><%End SubSub PanelB%><!-- SELECT RELEASE B ----------------------------------------------><table width="100%" border="0" cellspacing="10" cellpadding="0"><tr><td align="left" class="body_col"><img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13"> Select Release B<hr size="1px" color="Olive" noshade></td></tr><tr><td align="left"><select name="projB" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagB );"><option value="">-- Select Project --</option><%OraDatabase.Parameters.Add "PROJ_ID", objRelCollectorB.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBERSet rsQry = OraDatabase.DbCreateDynaset( GetQuery("ProjectsCombo.sql"), cint(0))OraDatabase.Parameters.Remove "PROJ_ID"While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%><option value="<%=rsQry("proj_id")%>" <%=rsQry("selected")%>><%=rsQry("proj_name")%></option><%rsQry.MoveNextWEndrsQry.CloseSet rsQry = Nothing%></select></td></tr><tr><td align="left"><select name="rtagB" id="rtagB" class="form_item"><%OraDatabase.Parameters.Add "PROJ_ID", objRelCollectorB.Item("proj_id"), ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "RTAG_ID", objRelCollectorB.Item("rtag_id"), ORAPARM_INPUT, ORATYPE_NUMBERSet rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))OraDatabase.Parameters.Remove "PROJ_ID"OraDatabase.Parameters.Remove "RTAG_ID"While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%><option value="<%=rsQry("rtag_id")%>" <%=rsQry("selected")%>><%=rsQry("rtag_name")%></option><%rsQry.MoveNextWEndrsQry.CloseSet rsQry = Nothing%></select></td></tr><%If (parRtagB <> "") Then%><tr><td align="left"><a href="dependencies.asp?rtag_id=<%=parRtagB%>" class="body_txt_drk">Go To Release B »</a></td></tr><%End If%><tr class="body_txt"><td><%If (parRtagA <> "") AND (parRtagB <> "") AND isMergable Then%><!-- Bulk Operations +++++++++++++++++++++++++++++++++++++++++++ --><p> <fieldset style="width:200px;" ><legend class="body_txt">Bulk Operations</legend><div><button type="button" class="BulkButton form_btn_comp" onClick='processAll("UASrc");'><%=LIMG_UPDATED%>Add - Updated</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("UWASrc");'><%=LIMG_OUTDATED%>Add - Updated with Warning</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("RASrc");'><%=LIMG_REMOVED%>Add - Removed</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("ABSrc");'><%=LIMG_ADDED%>Remove - Added</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("URASrc");'><%=LIMG_RIPPLED%>Add - Rippled</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("BBSrc");'><%=LIMG_UNCHANGED%>Remove - Unchanged</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("APSBSrc");'><%=LIMG_PENDING%>Remove - Pending Removal</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("APABSrc");'><%=LIMG_PENDING%>Remove - Pending Addition</button><button type="button" class="BulkButton form_btn_comp" onClick='processAll("undoSrc");'><%=LIMG_PENDING%>Revert All</button></div></fieldset><%End If%></td></tr></table><!-- SELECT RELEASE B END ----------------------------------------------><%End SubSub CenterPanel%><!-- DIFF --------------------------------------------------------><table width="100%" border="0" cellspacing="10" cellpadding="0"><tr><td><table width="100%" border="0" cellspacing="0" cellpadding="0" class='rounded_box rounded_box_pad'><caption>DIFF / MERGE RELEASE<%If genReport Then%> [Generating Report]<%End If%></caption><tr><td bgcolor="#FFFFFF" valign="top" class="form_item"><table width="100%" border="0" cellspacing="0" cellpadding="5"><tr><td width="100%" bgcolor="#DAD7C8"><input type="submit" name="btn" value="Compare" class="form_btn_comp" style="margin-right:5px;"><input type="submit" name="btn" value="Swap Compare" class="form_btn_comp"><span class="body_txt"><input name="btn" type="submit" class="form_btn" value="Mail Me Report"><%'<input name="btn" type="submit" class="form_btn" value="Show Me Report">%></span></td><td width="1" align="right" bgcolor="#DAD7C8" nowrap><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><%Dim mergeMessage, mergeDisabledmergeDisabled = " disabled"If (parRtagA = "") ThenmergeMessage = "Select Release A"ElseIf (parRtagB = "") ThenmergeMessage = "Select Release B"ElseIf NOT isMergable ThenmergeMessage = "Release B cannot be modified"ElsemergeDisabled = ""End If%><td class="err_alert nowrap" style="padding-right:1em"><%=mergeMessage%></td><td><input type="submit" name="btn" value="Merge" class="form_btn_comp" style="margin-right:10px;" <%=mergeDisabled%>></td><td><input type="submit" name="btn" value="Exit" class="form_btn_comp"></td></tr></table></td></tr></table><%' Successfull MergeIf (Request("btn") = "Merge") ThenCall Messenger ( "Merge has completed successfully.", 3, "100%" )End IfIf genReport ThenSet FSO=Server.CreateObject("Scripting.FileSystemObject")Set NewTextFile=FSO.CreateTextFile(reportPath, true)Call Header()End IfIf (parRtagA <> "") AND (parRtagB <> "")Then%><table width="100%" border="0" cellspacing="1" cellpadding="0"><tr><td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorA.Item("official")) & objRelCollectorA.Item("location")%> </td><td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td><td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="20"></td><td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td><td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorB.Item("official")) & objRelCollectorB.Item("location")%></td><td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td></tr><%OraDatabase.Parameters.Add "RTAG_A", parRtagA, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "RTAG_B", parRtagB, ORAPARM_INPUT, ORATYPE_NUMBEROraDatabase.Parameters.Add "NO_CHANGE", GetIsDiffFilterChecked(enumDB_NUM_DIFF_NO_CHANGE), ORAPARM_INPUT, ORATYPE_VARCHAR2OraDatabase.Parameters.Add "ADDED", GetIsDiffFilterChecked(enumDB_NUM_DIFF_NEW), ORAPARM_INPUT, ORATYPE_VARCHAR2OraDatabase.Parameters.Add "UPDATED", NULL, ORAPARM_INPUT, ORATYPE_VARCHAR2OraDatabase.Parameters.Add "REMOVED", GetIsDiffFilterChecked(enumDB_NUM_DIFF_REMOVED), ORAPARM_INPUT, ORATYPE_VARCHAR2Set 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))If genReport ThenCall Javascript()Call Styles()NewTextFile.WriteLine("<title>Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"</title>")NewTextFile.WriteLine("<div class=""page_title"">Difference Report Between "&rsQryA("proj_name")&" "&rsQryA("rtag_name")&" and "&rsQryB("proj_name")&" "&rsQryB("rtag_name")&"</div><br>")NewTextFile.WriteLine("<b>Key:</b><br><blockquote>")NewTextFile.WriteLine("<span class=changesa><b>SOURCE CODE CHANGES</b></span><span class=texta> Indicates Changes to a Package in "& rsQryA("rtag_name") &".</span><br>")NewTextFile.WriteLine("<span class=changesb><b>SOURCE CODE CHANGES</b></span><span class=textb> Indicates Changes to a Package in "& rsQryB("rtag_name") &".</span><br>")NewTextFile.WriteLine("<span class=changesnone><b>Grey Text</b></span><span class=textnone> No Source Code Changes to a Package in either Release.</span>")NewTextFile.WriteLine("</blockquote>")NewTextFile.WriteLine("<b>Toggle Sections:</b><blockquote>")NewTextFile.WriteLine("<span class=pointer onClick=""MM_toggleAll('divPkgInfo','1');"">Expand All</span>")NewTextFile.WriteLine("<span class=pointer onClick=""MM_toggleAll('divPkgInfo','');"">Collapse All</span>")NewTextFile.WriteLine("</blockquote>")End IfDim currView_idcurrView_id = -1While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))errormsg = falserowId = rsQry("pv_id_a") &"_"& rsQry("pv_id_b")btnMerge = LIMG_MERGEbtnRemove = LIMG_REMOVEchangeType = rsQry("change_type")isaSdk = rsQry("PKG_SDK_B")If changeType = "U" OR changeType = "UW" OR changeType = "UR" ThenDim MajorA, MajorB, MinorA, MinorB, PatchA, PatchB, BuildA, BuildB, pos, pkgVersionA, pkgVersionB, majMinA, majMinBMajorA = NULLMajorB = NULLMinorA = NULLMinorB = NULLpkgVersionA = 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 Apos = InStr(pkgVersionA, ".")If pos <> 0 Then' Extract the Major Version for AMajorA = Mid(pkgVersionA, 1, pos - 1)' Delete the Major Version Value from the string to get the minor and patch versionpkgVersionA = Mid(pkgVersionA, pos + 1, Len(pkgVersionA))' Find the second occurence of the dot in package version Apos = InStr(pkgVersionA, ".")' Extract the Minor Version for AIf pos <> 0 ThenMinorA = Mid(pkgVersionA, 1, pos - 1)End IfEnd If' Find the first occurence of the dot in package version Bpos = InStr(pkgVersionB, ".")If pos <> 0 Then' Extract the Major Version for BMajorB = Mid(pkgVersionB, 1, pos - 1)' Delete the Major Version Value from the string to get the minor and patch versionpkgVersionB = Mid(pkgVersionB, pos + 1, Len(pkgVersionB))' Find the second occurence of the dot in package version Bpos = InStr(pkgVersionB, ".")' Extract the Minor Version for BIf pos <> 0 ThenMinorB = Mid(pkgVersionB, 1, pos - 1)End IfEnd IfIf MajorA = MajorB ThenIf MinorA = MinorB ThenIf IsNumeric(PatchA) AND IsNumeric(PatchB) ThenIf CInt(PatchB) > CInt(PatchA) ThenbtnMerge = LIMG_MERGE_WARNElsebtnMerge = LIMG_MERGEEnd IfEnd IfElseIf IsNumeric(MinorA) AND IsNumeric(MinorB) ThenIf CInt(MinorB) > CInt(MinorA) ThenbtnMerge = LIMG_MERGE_WARNElsebtnMerge = LIMG_MERGEEnd IfEnd IfEnd IfElseIf IsNumeric(MajorA) AND IsNumeric(MajorB) ThenIf CInt(MajorB) > CInt(MajorA) ThenbtnMerge = LIMG_MERGE_WARNElsebtnMerge = LIMG_MERGEEnd IfEnd IfEnd IfIf btnMerge = LIMG_MERGE_WARN ThenchangeType = "UW"End IfEnd 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: pending, unchanged, additions, removals, updates.' This is important to the row skip filtering carried out below.Dim skipRowIf rsQry("pv_id_a") ThenskipRow = pkgSeen.Exists(CStr(rsQry("pv_id_a")))pkgSeen.Item(CStr(rsQry("pv_id_a"))) = 1ElseskipRow = FALSEEnd IfIf GetIsDiffFilterChecked(enumDB_NUM_DIFF_PENDING) <> "" ThenIf changeType = "APS" OR changeType = "APA" ThenskipRow = TRUEEnd IfEnd IfIf GetIsDiffFilterChecked(enumDB_NUM_DIFF_UPDATED) <> "" ThenIf changeType = "U" ThenskipRow = TRUEEnd IfEnd IfIf GetIsDiffFilterChecked(enumDB_NUM_DIFF_WARN) <> "" ThenIf changeType = "UW" ThenskipRow = TRUEEnd IfEnd IfIf GetIsDiffFilterChecked(enumDB_NUM_DIFF_RIPPLE) <> "" ThenIf changeType = "UR" ThenskipRow = TRUEEnd IfEnd IfIf NOT skipRow ThenCall GetDiffStateIcon ( changeType, ChangeTypeIcon )colorA = LCOLOR_NOT_CHANGEDcolorB = LCOLOR_NOT_CHANGEDSelect Case changeTypeCase "U"colorA = LCOLOR_CHANGEDcolorB = LCOLOR_CHANGEDCase "UW"colorA = LCOLOR_OUTDATEDcolorB = LCOLOR_OUTDATEDbtnMerge = LIMG_MERGE_WARNCase "UR"colorA = LCOLOR_RIPPLEDcolorB = LCOLOR_RIPPLEDCase "A"colorA = LCOLOR_BLANKCase "R"colorB = LCOLOR_BLANKEnd Select' -------- GROUP BY BASE VIEW -----------------If CDbl(currView_id) <> CDbl(rsQry("view_id")) Then%><tr><td valign="top" nowrap class="form_ttl"><b><%=rsQry("view_name")%></b></td><td class="form_ttl"> </td><td class="form_ttl"> </td><td class="form_ttl"> </td><td class="form_ttl"> </td><td class="form_ttl"> </td></tr><%currView_id = CDbl(rsQry("view_id"))End If%><tr><td class="body_row" nowrap><DIV id="PVA<%=rowId%>" style="background:<%=colorA%>; padding:5px;" data_color="<%=colorA%>"><%=rsQry("pkg_name_a") &" "& rsQry("pkg_version_a")%></DIV></td><%Dim pkgADisplayControlpkgADisplayControl = isMergableDim pkgAClass: pkgAClass = changeType & "ASrc"If IsNull( changeType ) OR (changeType = "A") OR (changeType = "B") OR (changeType = "APA") OR (changeType = "APS") Then pkgADisplayControl = FALSEIf isaSdk Then pkgADisplayControl = FALSE%><td bgcolor="#F5F5F5"><%If pkgADisplayControl Then%><DIV id="IMGMERGE<%=rowId%>" class='<%=pkgAClass%> pointer' onClick="MergePackage( '<%=rsQry("pv_id_a")%>', '<%=rsQry("pv_id_b")%>', '<%=rowId%>' );"><%=btnMerge%></DIV><%End If%></td><td bgcolor="#E4E9EC"><DIV id="IMGSTATE<%=rowId%>" DATA_CT="<%=changeType%>"><%=ChangeTypeIcon%></DIV></td><%Dim pkgBDisplayControlpkgBDisplayControl = isMergableDim pkgBClass: pkgBClass = changeType & "BSrc"If changeType = "R" Then pkgBDisplayControl = FALSEIf isaSdk Then pkgBDisplayControl = FALSE%><td bgcolor="#F5F5F5"><%If pkgBDisplayControl Then%><DIV id="IMGREMOVE<%=rowId%>" class='<%=pkgBClass%> pointer' onClick="RemovePackage( '<%=rsQry("pv_id_a")%>', '<%=rsQry("pv_id_b")%>', '<%=rowId%>' );"><%=btnRemove%></DIV><%ElseIf isaSdk Then %><DIV ><%=LIMG_SDK%></DIV><%End If%></td><td class="body_row" nowrap><DIV id="PVB<%=rowId%>"style="background:<%=colorB%>; padding:5px;"data_color="<%=colorB%>"data_pkg="<%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%>"><%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%><%If ChangeType = "APS" Then%>(removal pending<%=Quick_Help("RemovalPending")%>)<%ElseIf ChangeType = "APA" Then%>(addition pending<%=Quick_Help("AdditionPending")%>)<%End If %></DIV><input type="hidden" disabled="disabled" name="addpkg" id="ADDPKG_<%=rowId%>" value=""><input type="hidden" disabled="disabled" name="removepkg" id="REMOVEPKG_<%=rowId%>" value=""></td><td bgcolor="#F5F5F5"><DIV id="IMGUNDO<%=rowId%>" style="display:none;" class='undoSrc pointer' onClick="UndoPackage( '<%=rowId%>' );"><%=LIMG_UNDO%></DIV></td></tr><%End If %><%If genReport AND NOT skipRow ThenIf rsQry("pv_id_a") ThenSet rsQryCommentsA = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_a"), cint(0))End IfIf rsQry("pv_id_b") ThenSet rsQryCommentsB = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_b"), cint(0))End IfpkgA = rsQry("pkg_name_a")pkgB = rsQry("pkg_name_b")If pkgA <> "" thenpkgname = pkgAElsepkgname = pkgBEnd IfIf changeType = "U" OR changeType = "UW" ThenChangeASource = falseChangeAUpdate = falseChangeBSource = falseChangeBUpdate = falseIf genReport Then'NewTextFile.WriteLine("<br><b><font face="&chr(34)&"arial"&chr(34)&">"&pkgname&"</font></b>")NewTextFile.Write("<span class=""body_scol pointer"" onClick=""toggleSPAN('"& rowId &"');"">"& pkgname &"</span>")NewTextFile.WriteLine("<DIV class=divPkgInfo id=""spanPkgInfo"& rowId &""" name=""spanPkgInfo"" style=""display:none;"">")NewTextFile.Write(rsQryA("rtag_name")&" uses: "&rsQry("pkg_version_a")&" (")Call Release(rsQry("pv_id_a"))NewTextFile.WriteLine(")<br>")NewTextFile.Write(rsQryB("rtag_name")&" uses: "&rsQry("pkg_version_b")&" (")Call Release(rsQry("pv_id_b"))NewTextFile.WriteLine(")<br>")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 NextWhile CLng(a) <> CLng(b) and NOT errormsg'NewTextFile.WriteLine("A: "&a)'NewTextFile.WriteLine("B: "&b)pvCollectionA.Add CStr(a), EmptypvCollectionB.Add CStr(b), EmptyIf CLng(a) > CLng(b) Then'NewTextFile.WriteLine("TestA")Call LastPvIdA(a)ElseIf CLng(b) > CLng(a) Then'NewTextFile.WriteLine("TestB")Call LastPvIdB(b)End IfWendSet pvCollectionA = NothingSet pvCollectionB = NothingCall pkg_Version(a)NewTextFile.Write("Common PARENT package version: "&pkgversion&" (")Call Release(a)NewTextFile.WriteLine(")<br><br>")NewTextFile.WriteLine()NewTextFile.WriteLine("<b>"&rsQryA("rtag_name")&"</b>")If pkgversion <> rsQry("pkg_version_a") ThenNewTextFile.WriteLine("<blockquote><b><i>Versions between "& pkgversion &" and "& rsQry("pkg_version_a")&"</i></b></blockquote>")If errormsg ThenNewTextFile.WriteLine("Error determining root!<br>")NewTextFile.WriteLine()End Ifsource_change = falseWhile CLng(a) <> CLng(c) and NOT errormsgCall Comments(c)If scFlag = TRUE ThenCall GetFixedIssues(c)End IfCall LastPvIdAa(c)NewTextFile.WriteLine()WendIf source_change = false ThenNewTextFile.WriteLine("<blockquote><b><i>No source changes to "& rsQryA("rtag_name")&". Only Rippled Builds.</i></b></blockquote><br>")ChangeASource = trueEnd IfCall pkg_Version(b)NewTextFile.WriteLine()NewTextFile.WriteLine()ElseIf pkgversion = rsQry("pkg_version_a") ThenNewTextFile.WriteLine("<blockquote><b><i>No updates to "& rsQryA("rtag_name")&"</i></b></blockquote><br>")ChangeAUpdate = trueNewTextFile.WriteLine()End IfNewTextFile.WriteLine("<b>"&rsQryB("rtag_name")&"</b>")If pkgversion <> rsQry("pkg_version_b") ThenNewTextFile.WriteLine("<blockquote><b><i>Versions between "& pkgversion &" and "& rsQry("pkg_version_b")&"</i></b></blockquote>")If errormsg ThenNewTextFile.WriteLine("Error determining root!<br>")NewTextFile.WriteLine()End Ifsource_change = falseWhile CLng(b) <> CLng(d) and NOT errormsgCall Comments(d)If scFlag = TRUE ThenCall GetFixedIssues(d)End IfCall LastPvIdBb(d)NewTextFile.WriteLine()WendIf source_change = false ThenNewTextFIle.WriteLine("<blockquote><b><i>No source changes to "& rsQryB("rtag_name")&". Only Rippled Builds.</i></b></blockquote><br>")ChangeBSource = trueEnd IfElseIf pkgversion = rsQry("pkg_version_b") ThenNewTextFile.WriteLine("<blockquote><b><i>No updates to "& rsQryB("rtag_name")&"</i></b></blockquote><br>")ChangeBUpdate = trueNewTextFile.WriteLine()End IfNewTextFile.WriteLine("</DIV>")If ChangeASource ThenIf ChangeBSource ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""> <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": .</b class=changesnone> Ripple Builds Only.</td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &": </b class=changesnone> Ripple Builds Only.</td> </tr></table></blockquote>")ElseIf ChangeBUpdate ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""> <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": </b><span class=changesnone>Ripple Builds Only.</span></td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &": </b><span class=changesnone> No Updates.</span></td> </tr></table></blockquote>")ElseIf NOT ChangeBSource AND NOT ChangeBUpdate ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""><tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>Ripple Builds Only.</span></td> <td width=""50%""> <b>"& Ucase(rsQryB("rtag_name")) &":</b> <b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")End IfEnd IfIf ChangeBSource ThenIf NOT ChangeAUpdate ThenIf NOT ChangeASource AND NOT ChangeBUpdate ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""> <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &": </b><b class=changesa> SOURCE CODE CHANGES</b>.</td> <td width=""50%""> <b>"& Ucase(rsQryB("rtag_name")) &":</b> <span class=changesnone> Ripple Builds Only.</span></td> </tr></table></blockquote>")End IfEnd IfEnd IfIf NOT ChangeASource ThenIf NOT ChangeAUpdate ThenIf NOT ChangeBSource AND NOT ChangeBUpdate ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""> <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <b class=changesa> SOURCE CODE CHANGES.</b></td><td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &":</b><b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")ElseIf ChangeBUpdate ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""> <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <b class=changesa> SOURCE CODE CHANGES.</b></td> <td width=""50%""><b>"& Ucase(rsQryB("rtag_name")) &":</b><span class=changesnone> No Updates.</span></td> </tr></table></blockquote>")End IfElseIf ChangeAUpdate ThenIf NOT ChangeBSource AND NOT ChangeBUpdate ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""> <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>No Updates.</span></td> <td width=""50%""> <b></font>"& Ucase(rsQryB("rtag_name")) &":</b><b class=changesb> SOURCE CODE CHANGES.</b></td></tr></table></blockquote>")ElseIf ChangeBSource ThenNewTextFile.WriteLine("<blockquote><table width=""100%"" border=""0""> <tr><td width=""50%""><b>"& Ucase(rsQryA("rtag_name")) &":</b> <span class=changesnone>No Updates.</span></td> <td width=""50%""> </font><b>"& Ucase(rsQryB("rtag_name")) &":</b> <span class=changesnone> Ripple Builds Only.</span></td> </tr></table></blockquote>")End IfEnd IfEnd IfEnd IfEnd If 'changeType = "U" OR changeType = "UW"End If 'emailrsQry.MoveNextWEndrsQry.CloseSet rsQry = Nothing%><%If genReport ThenCall Footer()NewTextFile.CloseSet NewTextFile=NothingEnd If%></table><br><%Else%><br><%If (parRtagB <> "") ThenCall Messenger ( "Select <b>Release A</b> to compare.", 3, "100%" )ElseIf (parRtagA <> "") ThenCall Messenger ( "Select <b>Release B</b> to compare.", 3, "100%" )ElseCall Messenger ( "Select <b>Release A</b> and <b>Release B</b> to compare.", 3, "100%" )End If%><%End If%></td></tr></table></td></tr></table><!-- DIFF END ----------------------------------------------------><%End Sub%><html><head><title>Release Manager</title><link rel="shortcut icon" href="<%=FavIcon%>"/><meta HTTP-EQUIV="Pragma" CONTENT="no-cache"><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link rel="stylesheet" href="images/release_manager_style.css?ver=<%=VixVerNum%>" type="text/css"><link rel="stylesheet" href="images/navigation.css?ver=<%=VixVerNum%>" type="text/css"><script language="JavaScript" src="images/common.js?ver=<%=VixVerNum%>"></script><script language="JavaScript" src="scripts/remote_scripting.js?ver=<%=VixVerNum%>"></script><!--#include file="_jquery_includes.asp"--><!--#include file="_menu_def.asp"--><script language="JavaScript1.2" src="images/popup_menu.js?ver=<%=VixVerNum%>"></script><!-- TIPS --><script language="JavaScript" src="images/tipster.js?ver=<%=VixVerNum%>"></script><script language="JavaScript" src="images/_help_tips.js?ver=<%=VixVerNum%>"></script><script language="JavaScript" type="text/javascript"><!--function RequestReleaseCombo( paramString, rowId ){var requestURL = 'RequestReleaseCombo.asp';// Set ajax divnameajaxdivname = rowId;//Append the name to search for to the requestURLvar url = requestURL + paramString;//Progress//alert(MM_findObj( rowId ));//MM_findObj( rowId ).options[0] = new Option('Loading...','');//MM_findObj( rowId ).selectedIndex = 0;rowId.options[0] = new Option('Loading...','');rowId.selectedIndex = 0;//Create the xmlHttp object to use in the request//stateChangeHandler will fire when the state has changed, i.e. data is received back// This is non-blocking (asynchronous)xmlHttp = GetXmlHttpObject(stateComboChangeHandler);//Send the xmlHttp get to the specified urlxmlHttp_Get(xmlHttp, url);}function SetDisplay(name, mode){var o;if (o = MM_findObj(name)){o.style.display = mode;}}function MergePackage ( pkga, pkgb, rowId ){// Set merge hidden field with new valueMM_findObj( 'ADDPKG_' + rowId ).value = pkga;MM_findObj( 'ADDPKG_' + rowId ).removeAttribute("disabled");var divA = MM_findObj( 'PVA' + rowId );var divB = MM_findObj( 'PVB' + rowId );// Set text equaldivB.innerHTML = divA.innerHTML;// Set highlight to blankdivA.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';divB.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';// Set Change state icon to blankSetDisplay( 'IMGSTATE' + rowId, 'none');// Remove Merge ButtonSetDisplay( 'IMGMERGE' + rowId, 'none');SetDisplay( 'IMGREMOVE' + rowId, 'none');// Show undo buttonSetDisplay( 'IMGUNDO' + rowId, 'block');}function RemovePackage ( pkga, pkgb, rowId ){// Set remove hidden field with new valueMM_findObj( 'REMOVEPKG_' + rowId ).value = pkgb;MM_findObj( 'REMOVEPKG_' + rowId ).removeAttribute("disabled");var divA = MM_findObj( 'PVA' + rowId );var divB = MM_findObj( 'PVB' + rowId );// Set text equaldivB.style.textDecoration = 'line-through';// Set highlight to blankif (GetChangeType(rowId) != "A"){divA.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';}divB.style.backgroundColor = '<%=LCOLOR_NOT_CHANGED%>';// Set Change state icon to blankSetDisplay( 'IMGSTATE' + rowId , 'none');// Remove Merge ButtonSetDisplay( 'IMGMERGE' + rowId , 'none');SetDisplay( 'IMGREMOVE' + rowId , 'none');// Show undo buttonSetDisplay( 'IMGUNDO' + rowId ,'block');}function GetChangeType(rowId){var cht = MM_findObj( 'IMGSTATE' + rowId );var chd = '?';if (cht) {chd = cht.getAttribute('data_ct');}return chd;}function UndoPackage ( rowId ){// Set merge/remove hidden field with new valueMM_findObj( 'ADDPKG_' + rowId ).value = '';MM_findObj( 'ADDPKG_' + rowId ).setAttribute("disabled", "disabled" );MM_findObj( 'REMOVEPKG_' + rowId ).value = '';MM_findObj( 'REMOVEPKG_' + rowId ).setAttribute("disabled", "disabled" );var divA = MM_findObj( 'PVA' + rowId );var divB = MM_findObj( 'PVB' + rowId );// Set text equaldivB.innerHTML = divB.getAttribute('data_pkg');divB.style.textDecoration = 'none';// Set highlight to blankdivA.style.backgroundColor = divA.getAttribute('data_color');divB.style.backgroundColor = divB.getAttribute('data_color');// Set Change state icon to blankSetDisplay( 'IMGSTATE' + rowId, 'block');// Remove Merge Buttonvar chd = GetChangeType(rowId);if (chd == "R"){SetDisplay( 'IMGMERGE' + rowId, 'block');}else if ( (chd == "A") || (chd == "") ){SetDisplay( 'IMGREMOVE' + rowId, 'block');}else{SetDisplay( 'IMGMERGE' + rowId, 'block');SetDisplay( 'IMGREMOVE' + rowId,'block');}// Show undo buttonSetDisplay( 'IMGUNDO' + rowId, 'none');}// An object to contain the filter datavar filter;// Flip the current state of each Filter check boxesfunction initFilter() {filter = new Object();filter.btn = document.getElementById("difilterBtn");filter.x = document.getElementsByName("difilter");filter.len = filter.x.length;saveFilterState();filter.oValues = filter.Values.slice(0);setFilterTitle();}function toggleFilters(){switch ( filter.State ){case 'Flip':for (var i = 0; i < filter.len; i++) {filter.x[i].checked = !filter.x[i].checked;}filter.State = 'On';break;case 'On':for (var i = 0; i < filter.len; i++) {filter.x[i].checked = true;}filter.State = 'Off';break;case 'Off':for (var i = 0; i < filter.len; i++) {filter.x[i].checked = false;}filter.State = 'Restore';break;case 'Restore':for (var i = 0; i < filter.len; i++) {filter.x[i].checked = filter.Values[i];}filter.State = 'Reset';break;default:for (var i = 0; i < filter.len; i++) {filter.x[i].checked = filter.oValues[i];}filter.State = 'Flip';break;}setFilterTitle();EnableRefresh();}// Enable the "Refresh" button - when filter is changedfunction EnableRefresh(state){if ( filter.btn ) {// Check if shown values match the initial valuesvar btnState = true;for (var i = 1; i < filter.len; i++) {//console.log ( filter.x[i].checked,filter.oValues[i], filter.x[i].checked != filter.oValues[i] )if ( filter.x[i].checked != filter.oValues[i] ) {btnState = false;break;}}filter.btn.disabled = btnState;}}// One of the filter buttons has been clicked// First one is special (and we don't want to know about its click)function filterClicked(e){if ( ! e.target.id ) {saveFilterState();setFilterTitle();EnableRefresh();}}function saveFilterState(){filter.State = 'Flip';filter.Title = filter.x[0];filter.Values = new Array(filter.len);for (var i = 0; i < filter.len; i++) {filter.Values[i] = filter.x[i].checked;}}function setFilterTitle(){filter.Title.checked = false;filter.Title.title = "Toggle filters: Flip, On, Off, Restore, Reset - " + filter.State;}function processAll(tagClass){var elist = document.getElementsByClassName(tagClass);for (let item of elist) {item.onclick.apply(item);}}//--></script><style>#filterTable td { background-color:#E4E9EC }.BulkButton {width: 100%;text-align: left; margin:1px;}</style></head><!-- HEADER --><!--#include file="_header.asp"--><form name="FormName" method="post" action="<%=ScriptName%>"><!-- BODY ----><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="20%" valign="top" class='bg_panel'><%Call PanelA%></td><td width="60%" rowspan="2" valign="top" align="center" class='bg_grey'><%Call CenterPanel%></td><td width="20%" valign="top" class='bg_panel'><%Call PanelB%></td></tr><tr><td class='bg_panel_btm'><img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30"></td><td class='bg_panel_btm'><img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30"></td></tr></table></form><%If email ThenSend_Email "Release Manager Notification",_ADMIN_EMAIL, _objAccessControl.UserEmail,_"Release Comparisons from Release Manager", _"Your requested report...",_reportPathEnd If%><!-- FOOTER --><!--#include file="_footer.asp"--></body></html>