Fast multi-file diff

"kirillmueller" <[email protected]> Sat, 09 Dec 2006 21:15:48 -0000
Newsgroups gmane.comp.version-control.cvs.gui.devel
Message-ID <[email protected]>
--82GdEe3m311m1zoHtBdl14TOQ7QEkxR8i9pDgz2
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

Hi all,

I've been testing my implementation of fast multi-file diff for
roughly half a year now, and I feel it's about time to commit it :-)
Sorry for the delay...

Just as a reminder: Instead of issuing separate checkout commands for
each file in question, it just issues a single checkout for all files
and creates separate files from cvs's output (which contains all files
joined together in this case). Thus, at most two invocations of cvs
checkout are needed for any diff.

1. First of all, I'd like to ask if I can commit the changes now, just
before the 2.0.8 release. I've already committed some refactoring,
sorry if this leads to additional trouble.

2. Jerzy, do you use a beautifier or something to format the sources?
I've noticed that some of my commits were altered by you, mostly it
was about spaces before/after parentheses.

3. There is a problem with "spamming" the external diff with, say, 100
pairs of files at once. Sleeping between diff invocations doesn't help
much, I'll open a new post for this issue. For now, the safest thing
would be to offer an option like "Bulk checkout" to give the user the
opportunity to resort to the original behavior. What do you think?

4. In an earlier discussion
(http://tech.groups.yahoo.com/group/cvsgui-dev/message/1365), the
concept of "baskets" was mentioned. I think, as a first step, we could
introduce a "flag" field in the file view and offer an option to set
the flag through diff. That is, the user chooses an option like
"select flag" in the diff dialog, and the command just selects the
flag for the files where differences were found. Then, the user could
filter the current view to show only the flagged files, or sort by
flag. (The "select flag" option conflicts with "use the external diff"
and "don't use the external diff (output diff to console)", so
something like radio buttons would do here.) In addition, the flag for
each file could be set and cleared manually. -- Personally, I would
value such an option. How about you?


Kind regards,

Kirill


--82GdEe3m311m1zoHtBdl14TOQ7QEkxR8i9pDgz2
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
</head>

<!-- Network content -->


<body style="background-color: #ffffff;">

<!--~-|**|PrettyHtmlStartT|**|-~-->
<div id="ygrp-mlmsg" style="width:655px; position:relative;">
  <div id="ygrp-msg" style="width: 490px; padding: 0 15px 0 0; float:left;  z-index:1;">
<!--~-|**|PrettyHtmlEndT|**|-~-->

    <div id="ygrp-text">
            <p>Hi all,<br>
<br>
I've been testing my implementation of fast multi-file diff for<br>
roughly half a year now, and I feel it's about time to commit it :-)<br>
Sorry for the delay...<br>
<br>
Just as a reminder: Instead of issuing separate checkout commands for<br>
each file in question, it just issues a single checkout for all files<br>
and creates separate files from cvs's output (which contains all files<br>
joined together in this case). Thus, at most two invocations of cvs<br>
checkout are needed for any diff.<br>
<br>
1. First of all, I'd like to ask if I can commit the changes now, just<br>
before the 2.0.8 release. I've already committed some refactoring,<br>
sorry if this leads to additional trouble.<br>
<br>
2. Jerzy, do you use a beautifier or something to format the sources?<br>
I've noticed that some of my commits were altered by you, mostly it<br>
was about spaces before/after parentheses.<br>
<br>
3. There is a problem with &quot;spamming&quot; the external diff with, say, 100<br>
pairs of files at once. Sleeping between diff invocations doesn't help<br>
much, I'll open a new post for this issue. For now, the safest thing<br>
would be to offer an option like &quot;Bulk checkout&quot; to give the user the<br>
opportunity to resort to the original behavior. What do you think?<br>
<br>
4. In an earlier discussion<br>
(<a href="http://tech.groups.yahoo.com/group/cvsgui-dev/message/1365">http://tech.<wbr>groups.yahoo.<wbr>com/group/<wbr>cvsgui-dev/<wbr>message/1365</a>), the<br>
concept of &quot;baskets&quot; was mentioned. I think, as a first step, we could<br>
introduce a &quot;flag&quot; field in the file view and offer an option to set<br>
the flag through diff. That is, the user chooses an option like<br>
&quot;select flag&quot; in the diff dialog, and the command just selects the<br>
flag for the files where differences were found. Then, the user could<br>
filter the current view to show only the flagged files, or sort by<br>
flag. (The &quot;select flag&quot; option conflicts with &quot;use the external diff&quot;<br>
and &quot;don't use the external diff (output diff to console)&quot;, so<br>
something like radio buttons would do here.) In addition, the flag for<br>
each file could be set and cleared manually. -- Personally, I would<br>
value such an option. How about you?<br>
<br>
Kind regards,<br>
<br>
Kirill<br>
<br>
</p>
    </div>  

    <!--~-|**|PrettyHtmlStart|**|-~-->
    <span width="1" style="color: white;">__._,_.___</span>
    <!-- Start the section with Message In topic -->
    <div id="ygrp-actbar">
              <span class="left">
          <a href="http://groups.yahoo.com/group/cvsgui-dev/message/1464;_ylc=X3oDMTM0OWxscGc3BF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBG1zZ0lkAzE0NjQEc2VjA2Z0cgRzbGsDdnRwYwRzdGltZQMxMTY1Njk5MDc5BHRwY0lkAzE0NjQ-">
            Messages in this topic          </a> (<span class="bld">1</span>)
        </span>
        <a href="http://groups.yahoo.com/group/cvsgui-dev/post;_ylc=X3oDMTJwbDN1OHJxBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBG1zZ0lkAzE0NjQEc2VjA2Z0cgRzbGsDcnBseQRzdGltZQMxMTY1Njk5MDc5?act=reply&messageNum=1464">
          <span class="bld">
            Reply          </span> (via web post)
        </a>  | 
        <a href="http://groups.yahoo.com/group/cvsgui-dev/post;_ylc=X3oDMTJlZ2c4YjFsBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA250cGMEc3RpbWUDMTE2NTY5OTA3OQ--" class="bld">
          Start a new topic        </a>
          </div> 
    <!-------     Start Nav Bar  ------>
    <!-- |**|begin egp html banner|**| -->
    <div id="ygrp-vitnav">
                <a href="http://groups.yahoo.com/group/cvsgui-dev/messages;_ylc=X3oDMTJlc2hmZjd0BF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA21zZ3MEc3RpbWUDMTE2NTY5OTA3OQ--">Messages</a>  
            |    <a href="http://groups.yahoo.com/group/cvsgui-dev/files;_ylc=X3oDMTJmdm5nam0xBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2ZpbGVzBHN0aW1lAzExNjU2OTkwNzk-">Files</a>  
            |    <a href="http://groups.yahoo.com/group/cvsgui-dev/photos;_ylc=X3oDMTJlbmZ0amk4BF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA3Bob3QEc3RpbWUDMTE2NTY5OTA3OQ--">Photos</a>  
            |    <a href="http://groups.yahoo.com/group/cvsgui-dev/links;_ylc=X3oDMTJmNmUycDkzBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2xpbmtzBHN0aW1lAzExNjU2OTkwNzk-">Links</a>  
            |    <a href="http://groups.yahoo.com/group/cvsgui-dev/database;_ylc=X3oDMTJjMmdxNDdvBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2RiBHN0aW1lAzExNjU2OTkwNzk-">Database</a>  
            |    <a href="http://groups.yahoo.com/group/cvsgui-dev/polls;_ylc=X3oDMTJmdThxajloBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA3BvbGxzBHN0aW1lAzExNjU2OTkwNzk-">Polls</a>  
            |    <a href="http://groups.yahoo.com/group/cvsgui-dev/members;_ylc=X3oDMTJldm91ZHUyBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA21icnMEc3RpbWUDMTE2NTY5OTA3OQ--">Members</a>  
            |    <a href="http://groups.yahoo.com/group/cvsgui-dev/calendar;_ylc=X3oDMTJkNDFucW82BF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2NhbARzdGltZQMxMTY1Njk5MDc5">Calendar</a>  
    </div>  
    <!-- |**|end egp html banner|**| -->

    <!-- Do not have place to put it yet -->
    <div id="ygrp-grft">
          </div>

    <!-- yahoo logo -->
    <!-- |**|begin egp html banner|**| -->
    <div id="ygrp-ft">
      <a href="http://groups.yahoo.com/;_ylc=X3oDMTJkMDZxaHQ0BF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2dmcARzdGltZQMxMTY1Njk5MDc5">
      <img src="http://us.i1.yimg.com/us.yimg.com/i/yg/img/logo/ma_grp_160.gif" height="15" width="106" border="0" alt="Yahoo! Groups"></a> <br>
      <a href="http://groups.yahoo.com/group/cvsgui-dev/join;_ylc=X3oDMTJmZDhxZjVzBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA3N0bmdzBHN0aW1lAzExNjU2OTkwNzk-">Change settings via the Web</a> (Yahoo! ID required) <br>
      Change settings via email: <a href="mailto:[email protected]?subject=Email Delivery: Digest">Switch delivery to Daily Digest</a> | <a href = "mailto:[email protected]?subject=Change Delivery Format: Traditional">Switch format to Traditional</a> <br>

      <a href="http://groups.yahoo.com/group/cvsgui-dev;_ylc=X3oDMTJkNWQ3bHYwBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwNmdHIEc2xrA2hwZgRzdGltZQMxMTY1Njk5MDc5">
        Visit Your Group 
      </a> |
      <a href="http://docs.yahoo.com/info/terms/">
        Yahoo! Groups Terms of Use      </a> |
      <a href="mailto:[email protected]?subject=">
        Unsubscribe      </a> 
    </div>     <!-- |**|end egp html banner|**| -->
  </div> <!-- ygrp-msg -->

  
  <!-- Sponsor -->
  <!-- |**|begin egp html banner|**| -->
  <div id="ygrp-sponsor" style="width:140px;float: left; clear: none; margin-left: 5px; background:white; margin-bottom:25px ;position:absolute; top:0; right: 0;">
    <!-- Network content -->
    
    <!-- Start vitality -->
    <div id="ygrp-vital">
            <a href="http://groups.yahoo.com/group/cvsgui-dev;_ylc=X3oDMTJlbWV0dGtjBF9TAzk3MzU5NzE0BGdycElkAzI0OTMyNDUEZ3Jwc3BJZAMxNzA1MDA3MTgxBHNlYwN2dGwEc2xrA3ZnaHAEc3RpbWUDMTE2NTY5OTA3OQ--">
        Visit Your Group      </a>
    </div> 
                <div id="hd">SPONSORED LINKS</div>
      <div id="ov">
        <ul>
                    <li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjMXJpbWhxBF9TAzk3MzU5NzE0BF9wAzEEZ3JwSWQDMjQ5MzI0NQRncnBzcElkAzE3MDUwMDcxODEEc2VjA3NsbW9kBHN0aW1lAzExNjU2OTkwODA-?t=ms&k=Software+development+services&w1=Software+development+services&w2=Software+development&w3=Development+software&w4=Software+development+company&w5=Custom+software+development&c=5&s=154&g=2&.sig=7x2qo6dMYy1p5AU1pt1tiQ">Software development services</a></li>
                    <li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjMW5ydjFhBF9TAzk3MzU5NzE0BF9wAzIEZ3JwSWQDMjQ5MzI0NQRncnBzcElkAzE3MDUwMDcxODEEc2VjA3NsbW9kBHN0aW1lAzExNjU2OTkwODA-?t=ms&k=Software+development&w1=Software+development+services&w2=Software+development&w3=Development+software&w4=Software+development+company&w5=Custom+software+development&c=5&s=154&g=2&.sig=BN1lrlsQSEiIXBpRBgFwvg">Software development</a></li>
                    <li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjaHR1b2RtBF9TAzk3MzU5NzE0BF9wAzMEZ3JwSWQDMjQ5MzI0NQRncnBzcElkAzE3MDUwMDcxODEEc2VjA3NsbW9kBHN0aW1lAzExNjU2OTkwODA-?t=ms&k=Development+software&w1=Software+development+services&w2=Software+development&w3=Development+software&w4=Software+development+company&w5=Custom+software+development&c=5&s=154&g=2&.sig=tCpQXu3D1f1U1uy5lsC3_g">Development software</a></li>
                    <li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjYmllaWF2BF9TAzk3MzU5NzE0BF9wAzQEZ3JwSWQDMjQ5MzI0NQRncnBzcElkAzE3MDUwMDcxODEEc2VjA3NsbW9kBHN0aW1lAzExNjU2OTkwODA-?t=ms&k=Software+development+company&w1=Software+development+services&w2=Software+development&w3=Development+software&w4=Software+development+company&w5=Custom+software+development&c=5&s=154&g=2&.sig=vprGpfTz1GxuQRXlltd5Og">Software development company</a></li>
                    <li><a href="http://groups.yahoo.com/gads;_ylc=X3oDMTJjcnY2NXVmBF9TAzk3MzU5NzE0BF9wAzUEZ3JwSWQDMjQ5MzI0NQRncnBzcElkAzE3MDUwMDcxODEEc2VjA3NsbW9kBHN0aW1lAzExNjU2OTkwODA-?t=ms&k=Custom+software+development&w1=Software+development+services&w2=Software+development&w3=Development+software&w4=Software+development+company&w5=Custom+software+development&c=5&s=154&g=2&.sig=GblHBdeKJR4WCTYIwY_tYA">Custom software development</a></li>
                  </ul>
      </div>
    
    <!-- Network content -->
                <div id="nc">
              <div class="ad">
                      <div id="hd1">Yahoo! Mail</div> 
<p><a href="http://us.ard.yahoo.com/SIG=12hgp6onf/M=493064.8985657.9760727.8674578/D=groups/S=1705007181:NC/Y=YAHOO/EXP=1165706280/A=3848567/R=0/SIG=12jvenc9k/*http://us.rd.yahoo.com/evt=42408/*http://advision.webevents.yahoo.com/handraisers">Get on board</a></p> 
<p>You're invited to try</p> 
<p>the all-new Mail Beta.</p>                  </div>
                    <div class="ad">
                      <div id="hd1">New web site?</div> 
<p><a href="http://us.ard.yahoo.com/SIG=12hncp744/M=493064.8985663.9760769.8674578/D=groups/S=1705007181:NC/Y=YAHOO/EXP=1165706280/A=3848642/R=0/SIG=131eshi2t/*http://searchmarketing.yahoo.com/arp/srchv2.php?o=US2004&cmp=Yahoo&ctv=Groups3&s=Y&s2=&s3=&b=50">Drive traffic now.</a></p> 
<p>Get your business</p> 
<p>on Yahoo! search.</p>                  </div>
                    <div class="ad">
                      <div id="hd1">Y! Messenger</div> 
<p><a href="http://us.ard.yahoo.com/SIG=12hn8m05a/M=493064.8985659.9760753.8674578/D=groups/S=1705007181:NC/Y=YAHOO/EXP=1165706280/A=3848582/R=0/SIG=11umg3fun/*http://us.rd.yahoo.com/evt=42403/*http://messenger.yahoo.com">Instant hello</a></p> 
<p>Chat over IM with</p> 
<p>group members.</p>                  </div>
          </div>
      
  </div>   <!-- |**|end egp html banner|**| -->
  <div style="clear:both; color: #FFF; font-size:1px;">.</div>
</div> <img src="http://geo.yahoo.com/serv?s=97359714/grpId=2493245/grpspId=1705007181/msgId=1464/stime=1165699079/nc1=3848567/nc2=3848642/nc3=3848582" width="1" height="1"> <br>
<span  style="color: white;">__,_._,___</span>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</body>
<!--~-|**|PrettyHtmlStart|**|-~-->
<head>
<style type="text/css">
<!--
#ygrp-mlmsg {font-size:13px; font-family: arial,helvetica,clean,sans-serif;*font-size:small;*font:x-small;}
#ygrp-mlmsg table {font-size:inherit;font:100%;}
#ygrp-mlmsg select, input, textarea {font:99% arial,helvetica,clean,sans-serif;}
#ygrp-mlmsg pre, code {font:115% monospace;*font-size:100%;}
#ygrp-mlmsg * {line-height:1.22em;}
#ygrp-text{
    font-family: Georgia;	
}
#ygrp-text p{
    margin: 0 0 1em 0;
}
#ygrp-tpmsgs{
    font-family: Arial;	
    clear: both;
}
#ygrp-vitnav{
	padding-top: 10px;
	font-family: Verdana;
	font-size: 77%;
	margin: 0;
}
#ygrp-vitnav a{
	padding: 0 1px;
}
#ygrp-actbar{
	clear: both;
	margin: 25px 0;
	white-space:nowrap;
	color: #666;
	text-align: right;
}
#ygrp-actbar .left{
	float: left;
	white-space:nowrap;
}
.bld{font-weight:bold;}
#ygrp-grft{
	font-family: Verdana;
	font-size: 77%;
	padding: 15px 0;
}
#ygrp-ft{
  font-family: verdana;
  font-size: 77%;
  border-top: 1px solid #666; 
  padding: 5px 0; 
}
#ygrp-mlmsg #logo{
  padding-bottom: 10px;
}

#ygrp-vital{
	background-color: #e0ecee;
	margin-bottom: 20px;
	padding: 2px 0 8px 8px;
}
#ygrp-vital #vithd{
	font-size: 77%;
	font-family: Verdana;
	font-weight: bold;
	color: #333;
	text-transform: uppercase;
}
#ygrp-vital ul{
	padding: 0;
	margin: 2px 0;
}
#ygrp-vital ul li{
  list-style-type: none;
  clear: both;
  border: 1px solid #e0ecee;  
}
#ygrp-vital ul li .ct{
  font-weight: bold;
  color: #ff7900;
  float: right;
  width: 2em;
  text-align:right;
  padding-right: .5em;
}
#ygrp-vital ul li .cat{
  font-weight: bold;
}
#ygrp-vital a {
	text-decoration: none;
}

#ygrp-vital a:hover{
  text-decoration: underline;
}

#ygrp-sponsor #hd{
	color: #999;
	font-size: 77%;
}
#ygrp-sponsor #ov{
	padding: 6px 13px;
	background-color: #e0ecee;
	margin-bottom: 20px;
}
#ygrp-sponsor #ov ul{
	padding: 0 0 0 8px;
	margin: 0;
}
#ygrp-sponsor #ov li{
	list-style-type: square;
	padding: 6px 0;
	font-size: 77%;
}
#ygrp-sponsor #ov li a{
	text-decoration: none;
	font-size: 130%;
}
#ygrp-sponsor #nc {
  background-color: #eee;
  margin-bottom: 20px;
  padding: 0 8px;
}
#ygrp-sponsor .ad{
	padding: 8px 0;
}
#ygrp-sponsor .ad #hd1{
	font-family: Arial;
	font-weight: bold;
	color: #628c2a;
	font-size: 100%;
	line-height: 122%;
}
#ygrp-sponsor .ad a{
	text-decoration: none;
}
#ygrp-sponsor .ad a:hover{
	text-decoration: underline;
}
#ygrp-sponsor .ad p{
	margin: 0;
}
o {font-size: 0; }
.MsoNormal {
   margin: 0 0 0 0;
}
#ygrp-text tt{
  font-size: 120%;
}
blockquote{margin: 0 0 0 4px;}
.replbq {margin:4}
-->
</style>
</head>
<!--~-|**|PrettyHtmlEnd|**|-~-->
</html><!--End group email -->


--82GdEe3m311m1zoHtBdl14TOQ7QEkxR8i9pDgz2--