Justin,<div><br></div><div>I'm actually using a couple of repos locally, so it was fairly simple to reset one to a point just before where I was working and simply update that commit with my final changes, thus taking the failed work (and the patch to the patch) out of the loop.</div>
<div><br></div><div>As per your secondary instructions in skype, I used git show <commit ID> <file> to produce the following patch for  <span class="Apple-style-span" style="border-collapse: collapse; color: rgb(51, 51, 51); font-family: arial, sans-serif; ">OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs:</span></div>
<div><font class="Apple-style-span" color="#333333" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><br></span></font></div><div><font class="Apple-style-span" color="#333333" face="arial, sans-serif"><span class="Apple-style-span" style="border-collapse: collapse;"><div>
--- a/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs</div><div>+++ b/OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs</div><div>@@ -1231,20 +1231,36 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups</div>
<div>             List<GroupMembershipData> membershipData = m_groupData.GetAgentGroupMemberships(requestingClient.AgentId, dataForAgentID);</div><div>             GroupMembershipData[] membershipArray;</div><div> </div>
<div>-            if (requestingClient.AgentId != dataForAgentID)</div><div>-            {</div><div>+            //  c_scene and property accessor 'is_god' are in support of the opertions to bypass 'hidden' group attributes for</div>
<div>+            // those with a GodLike aspect.</div><div>+            Scene c_scene = (Scene) requestingClient.Scene;</div><div>+            bool is_god = c_scene.Permissions.IsGod(requestingClient.AgentId);</div><div>
+</div><div>+            if(is_god) {</div><div>                 Predicate<GroupMembershipData> showInProfile = delegate(GroupMembershipData membership)</div><div>                 {</div><div>                     return membership.ListInProfile;</div>
<div>                 };</div><div> </div><div>-                membershipArray = membershipData.FindAll(showInProfile).ToArray();</div><div>+                membershipArray = membershipData.ToArray();</div><div>             }</div>
<div>             else</div><div>             {</div><div>-                membershipArray = membershipData.ToArray();</div><div>-            }</div><div> </div><div>+                if (requestingClient.AgentId != dataForAgentID)</div>
<div>+                {</div><div>+                    Predicate<GroupMembershipData> showInProfile = delegate(GroupMembershipData membership)</div><div>+                    {</div><div>+                        return membership.ListInProfile;</div>
<div>+                    };</div><div>+</div><div>+                    membershipArray = membershipData.FindAll(showInProfile).ToArray();</div><div>+                }</div><div>+                else</div><div>+                {</div>
<div>+                    membershipArray = membershipData.ToArray();</div><div>+                }</div><div>+            }</div><div>             if (m_debugEnabled)</div><div>             {</div><div>                 m_log.InfoFormat("[GROUPS]: Get group membership information for {0} requested by {1}", dataForAgentID, requestingClient.AgentId);</div>
<div>@@ -1257,6 +1273,7 @@ namespace OpenSim.Region.OptionalModules.Avatar.XmlRpcGroups</div><div>             return membershipArray;</div><div>         }</div><div> </div><div>+ </div><div>         private void SendAgentDataUpdate(IClientAPI remoteClient, UUID dataForAgentID, UUID activeGroupID, string activeGroupName, ulong activeGroupPowers, string activeGroupTitle)</div>
<div>         {</div><div>             if (m_debugEnabled) m_log.DebugFormat("[GROUPS]: {0} called", System.Reflection.MethodBase.GetCurrentMethod().Name);</div><div><br></div><div><br></div><div>Let me know if this is the right sort of thing. Note that I cut a few lines from the top that git output to the patchfile, that I cut out. They may be necessary Idk, but if so let me know and I'll save them before I make a redux on the mantis site.</div>
<div><br></div><div>Cheers Justin!</div><div>James</div><div><br></div><div><br></div></span></font><br><div class="gmail_quote">On Fri, May 27, 2011 at 7:08 PM, James Stallings II <span dir="ltr"><<a href="mailto:james.stallings@gmail.com">james.stallings@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Thanks Justin,<div><br></div><div>Will do just shortly.</div><div><br></div><div>Cheers!</div><div>James<div><div></div>
<div class="h5"><br><br><div class="gmail_quote">On Fri, May 27, 2011 at 7:08 PM, Justin Clark-Casey <span dir="ltr"><<a href="mailto:jjustincc@googlemail.com" target="_blank">jjustincc@googlemail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Yes, please could you consolidate the patches (from a brief look it appears that later ones are now editing earlier ones) and attach to a mantis, which should be in patch included state.<br>


<br>
The best way to generate a suitable patch is to use<br>
<br>
git am <commit uuid>^<br>
<br>
on the command line.<div><br>
<br>
On 27/05/11 02:01, James Stallings II wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>
Just a quick apology to the list for the oldskool diff, Melanie_T tells me I should use udiff, and next time, I will.<br>
<br>
Cheers!<br>
James/Hiro<br>
<br></div><div><div></div><div>
On Thu, May 26, 2011 at 6:19 PM, James Stallings II <<a href="mailto:james.stallings@gmail.com" target="_blank">james.stallings@gmail.com</a> <mailto:<a href="mailto:james.stallings@gmail.com" target="_blank">james.stallings@gmail.com</a>>> wrote:<br>


<br>
    My apologies, but the previous code was completely ineffective on testing. I know, it should be tested before<br>
    submission. Mea Culpa, it looked really good.<br>
<br>
    This, however, actually works:<br>
<br>
    1103d1102<br>
    <<br>
    1117,1125c1116,1125<br>
    <<br>
    <                if (GetRequestingAgentID(remoteClient) != dataForAgentID)<br>
    <                {<br>
    <                    if (!membership.ListInProfile)<br>
    <                    {<br>
    <                       // If we're sending group info to remoteclient about another agent,<br>
    <                       // filter out groups the other agent doesn't want to share.<br>
    <                       continue;<br>
    <                    }<br>
    ---<br>
     >                 if (!remoteClient.Scene.Permissions.IsGod(remoteClient.AgentID))<br>
     >                     if (GetRequestingAgentID(remoteClient) != dataForAgentID)<br>
     >                     {<br>
     >                         if (!membership.ListInProfile)<br>
     >                         {<br>
     >                             // If we're sending group info to remoteclient about another agent,<br>
     >                             // filter out groups the other agent doesn't want to share.<br>
     >                             continue;<br>
     >                         }<br>
     >                     }<br>
    1128d1127<br>
    <<br>
    1237,1242c1236,1237<br>
    <             //  c_scene and property accessor 'is_god' are in support of the opertions to bypass 'hidden' group<br>
    attributes for<br>
    <             // those with a GodLike aspect.<br>
    <             Scene c_scene = (Scene) requestingClient.Scene;<br>
    <             bool is_god = c_scene.Permissions.IsGod(requestingClient.AgentId);<br>
    <<br>
    <             if(is_god) {<br>
    ---<br>
     >             if (requestingClient.AgentId != dataForAgentID)<br>
     >             {<br>
    1248c1243<br>
    <                 membershipArray = membershipData.ToArray();<br>
    ---<br>
     >                 membershipArray = membershipData.FindAll(showInProfile).ToArray();<br>
    1252,1265c1247<br>
    <<br>
    <                 if (requestingClient.AgentId != dataForAgentID)<br>
    <                 {<br>
    <                     Predicate<GroupMembershipData> showInProfile = delegate(GroupMembershipData membership)<br>
    <                     {<br>
    <                         return membership.ListInProfile;<br>
    <                     };<br>
    <<br>
    <                     membershipArray = membershipData.FindAll(showInProfile).ToArray();<br>
    <                 }<br>
    <                 else<br>
    <                 {<br>
    <                     membershipArray = membershipData.ToArray();<br>
    <                 }<br>
    ---<br>
     >                 membershipArray = membershipData.ToArray();<br>
    1266a1249<br>
     ><br>
<br></div></div>
    On Thu, May 26, 2011 at 11:36 AM, James Stallings II <<a href="mailto:james.stallings@gmail.com" target="_blank">james.stallings@gmail.com</a> <mailto:<a href="mailto:james.stallings@gmail.com" target="_blank">james.stallings@gmail.com</a>>><div>

<br>
    wrote:<br>
<br>
        Greetings, OpenSimulator developers :)<br>
<br>
        I'm writing to propose the addition of certain functionality<br>
        to OpenSim/Region/OptionalModules/Avatar/XmlRpcGroups/GroupsModule.cs, to wit:<br>
<br>
        Present 'Hidden' groups and other related group detail to agents requesting such iniformation via CAPs as have<br>
        assumed a 'godlike' aspect, or in other words, have successfully activated the administrative functionality in<br>
        the client.<br>
<br>
        The changes to the substance of the code involve credits more than not; a diff is both attached and included for<br>
        convenient review. A fork has been created on github at git://<a href="http://github.com/JamesStallings/opensim.git" target="_blank">github.com/JamesStallings/opensim.git</a><br></div>
        <<a href="http://github.com/JamesStallings/opensim.git" target="_blank">http://github.com/JamesStallings/opensim.git</a>> which contains the changes for convenience should contribution of<div><div></div><div>

<br>
        source be accepted. I will also open a mantis on the topic for the sake of thoroughness and attach the diff there.<br>
<br>
<br>
        Many thanks and cheers!<br>
<br>
        James Stallings aka Hiro Protagonist<br>
<br>
<br>
        Diff follows:<br>
<br>
        1103,1107d1102<br>
        <             //  c_scene and property accessor 'is_god' are in support of the opertions to bypass 'hidden'<br>
        group attributes for<br>
        <             // those with a GodLike aspect.<br>
        <             Scene c_scene = (Scene) remoteClient.Scene;<br>
        <             bool is_god = c_scene.Permissions.IsGod(remoteClient.AgentId);<br>
        <<br>
        1121,1138c1116,1126<br>
        < //              bypass the 'hidden' attributes of groups for those who have<br>
        < //              a GodLike aspect<br>
        < //<br>
        < //              Big shout out to Dan Banner for showing me his running proof-of-concept and endorsing this<br>
        idea as meaningful work<br>
        < //              Another big shout out to BlueWall Slade for helping me chase down all the elements required to<br>
        properly access<br>
        < //              Scene and IClientAPI properties.  JS aka HP<br>
        <                 if (!is_god)<br>
        <                 {<br>
        <                if (GetRequestingAgentID(remoteClient) != dataForAgentID)<br>
        <        {<br>
        <    if (!membership.ListInProfile)<br>
        <                    {<br>
        <                // If we're sending group info to remoteclient about another agent,<br>
        <        // filter out groups the other agent doesn't want to share.<br>
        < continue;<br>
        <                    }<br>
        <        }<br>
        < }<br>
        ---<br>
         >                 if (!remoteClient.Scene.Permissions.IsGod(remoteClient.AgentID))<br>
         >                     if (GetRequestingAgentID(remoteClient) != dataForAgentID)<br>
         >                     {<br>
         >                         if (!membership.ListInProfile)<br>
         >                         {<br>
         >                             // If we're sending group info to remoteclient about another agent,<br>
         >                             // filter out groups the other agent doesn't want to share.<br>
         >                             continue;<br>
         >                         }<br>
         >                     }<br>
         >                 }<br>
<br>
<br>
        --<br>
        ===================================<br>
        <a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
        <a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br>
        <a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
<br>
<br>
<br>
<br>
    --<br>
    ===================================<br>
    <a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
    <a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br>
    <a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
<br>
<br>
<br>
<br>
--<br>
===================================<br>
<a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
<a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br>
<a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
<br>
<br>
<br></div></div>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
</blockquote>
<br>
<br>
-- <br>
Justin Clark-Casey (justincc)<br>
<a href="http://justincc.org/blog" target="_blank">http://justincc.org/blog</a><br>
<a href="http://twitter.com/justincc" target="_blank">http://twitter.com/justincc</a><br>
_______________________________________________<br>
Opensim-dev mailing list<br>
<a href="mailto:Opensim-dev@lists.berlios.de" target="_blank">Opensim-dev@lists.berlios.de</a><br>
<a href="https://lists.berlios.de/mailman/listinfo/opensim-dev" target="_blank">https://lists.berlios.de/mailman/listinfo/opensim-dev</a><br>
</blockquote></div><br><br clear="all"><br></div></div>-- <br><div class="im">===================================<br><a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>

<a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br><a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
</div></div>
</blockquote></div><br><br clear="all"><br>-- <br>===================================<br><a href="http://simhost.com" target="_blank">http://simhost.com</a> <a href="http://osgrid.org" target="_blank">http://osgrid.org</a><br>
<a href="http://twitter.com/jstallings2" target="_blank">http://twitter.com/jstallings2</a><br><a href="http://www.linkedin.com/pub/5/770/a49" target="_blank">http://www.linkedin.com/pub/5/770/a49</a><br>
</div>