<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>.::Escovando Bits::. &#187; museu</title>
	<atom:link href="http://escovandobits.wordpress.com/tag/museu/feed/" rel="self" type="application/rss+xml" />
	<link>http://escovandobits.wordpress.com</link>
	<description>Programação, Linux, tecnologia da informação, dicas, artigos</description>
	<lastBuildDate>Sun, 05 Jul 2009 15:42:47 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='escovandobits.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/ac8d2c79730f1bc1a6ebab006a3670da?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>.::Escovando Bits::. &#187; museu</title>
		<link>http://escovandobits.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://escovandobits.wordpress.com/osd.xml" title=".::Escovando Bits::." />
		<item>
		<title>RCS + foo.c</title>
		<link>http://escovandobits.wordpress.com/2007/11/23/rcs-fooc/</link>
		<comments>http://escovandobits.wordpress.com/2007/11/23/rcs-fooc/#comments</comments>
		<pubDate>Fri, 23 Nov 2007 17:39:47 +0000</pubDate>
		<dc:creator>Tiago Maluta</dc:creator>
				<category><![CDATA[museu]]></category>

		<guid isPermaLink="false">http://escovandobits.wordpress.com/2007/11/23/rcs-fooc/</guid>
		<description><![CDATA[O RCS (Revision Control System) é o avô do programas de controle de versão. Por exemplo, o CVS (Concurrent Versions System) é construído sobre a estrutura do RCS com a vantagem de operar sobre uma rede. Hoje em dia a maioria dos projetos open source utiliza o CVS ou o Subversion para gerenciar seus arquivos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=3&subd=escovandobits&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p align="justify">O <a target="_blank" href="http://www.gnu.org/software/rcs/rcs.html" title="RCS"><strong>RCS</strong></a> (<em><strong>R</strong>evision <strong>C</strong>ontrol <strong>S</strong>ystem</em>) é o avô do programas de controle de versão. Por exemplo, o <strong>CVS</strong> (<em><strong>C</strong>oncurrent <strong>V</strong>ersions <strong>S</strong>ystem</em>) é construído sobre a estrutura do RCS com a vantagem de operar sobre uma rede. Hoje em dia a maioria dos projetos <em>open source</em> utiliza o <a target="_blank" href="http://www.nongnu.org/cvs/" title="CVS">CVS</a> ou o <a target="_blank" href="http://subversion.tigris.org/" title="Subversion">Subversion</a> para gerenciar seus arquivos fonte.</p>
<p align="justify">Resumindo, eu arrumei uma (in)utilidade para um programa que ninguém mais usa&#8230;</p>
<p align="justify"><span id="more-3"></span>Quem programa sabe que é muito comum criar pequenos trechos de código (em arquivos separados) para simular uma função ou um algoritmo antes de adicioná-lo em um programa maior. É o bom e velho teste.cpp, tmp.c, foo.java, etc. Muitas vezes o código é apagado e sobrescrito com melhores (ou piores) implementações. É aí que o RCS entra no jogo, em vez de criar vários arquivos fonte, você pode usá-lo para controlar as diferentes versões da mesma idéia.</p>
<p align="justify">Um exemplo, imagine que você esteja testando algum <em>container </em>da STL e faça algo do tipo:</p>
<pre class="brush: cpp;">

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

using namespace std;

int main(int argc, char *argv[]) {

vector&lt;string &gt; v;
vector&lt;string&gt;::iterator it;

v.insert(v.begin(), &quot;melão&quot;);
v.insert(v.begin(), &quot;banana&quot;);
v.insert(v.begin(), &quot;maça&quot;);
v.insert(v.begin(), &quot;laranja&quot;);
v.insert(v.begin(), &quot;uva&quot;);
v.insert(v.begin(), &quot;pêra&quot;);

for (it = v.begin(); it != v.end(); it++)
cout &lt;&lt; (*it) &lt;&lt; endl;

return 0;

}
</pre>
<p align="justify">Supondo que o nome do arquivo seja stl.cpp. O programa é tão novo que o RCS não sabe nada sobre ele ainda. A maneira como você apresenta um novo programa ao RCS é simplemente verificando-o. Os passos a seguir são necessários para criar um novo arquivo, sob controle de revisão.</p>
<blockquote><p>#mkdir RCS<br />
#<strong>ci -u</strong> stl.cpp<br />
RCS/stl.cpp,v &lt;&#8211; stl.cpp<br />
enter description, terminated with single &#8216;.&#8217; or end of file:<br />
NOTE: This is NOT the log message!<br />
&gt;&gt; Bricando com a STL<br />
&gt;&gt; .<br />
initial revision: 1.1<br />
done</p></blockquote>
<p align="justify">Nesse exemplo foi criado uma pasta RCS para guardar as cópias (isso não é necessário, mas deixa mais organizado o controle dos arquivos). Utilize o comando <strong>ci </strong>para iniciar o processo de verificação. Podemos verificar o arquivo criado.</p>
<blockquote><p># ls -lR<br />
-r&#8211;r&#8211;r&#8211; 1 maluta users 432 2007-11-13 17:17 stl.cpp</p>
<p>./RCS:<br />
-r&#8211;r&#8211;r&#8211; 1 maluta users 620 2007-11-13 17:18 stl.cpp,v</p></blockquote>
<p align="justify">O arquivo stl.cpp,v é um arquivo RCS especial, pois mantém algumas informações adicionais nesse arquivo. Ele armazena as informações de versão, a descrição recentemente digitada, o histório de alteração e assim por diante. Note que o arquivo é configurado com permissão de leitura para impedir que o arquivo seja alterado indevidamente.</p>
<p align="justify"><span style="color:#000000;"></span>Aí, fuçando na <a target="_blank" href="http://www.sgi.com/tech/stl/" title="STL docs">documentação</a> você descobre a função <a target="_blank" href="http://www.sgi.com/tech/stl/copy.html" title="copy()">copy</a>()&#8230; <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Vamos mudar o código, mas antes é preciso solicitar que o arquivo seja bloqueado, para isso utilizaremos a opção <strong>-l</strong>.</p>
<blockquote><p>$ <strong>co -l</strong> stl.cpp<br />
RCS/stl.cpp,v &#8211;&gt; stl.cpp<br />
revision 1.1 (locked)<br />
done</p></blockquote>
<p align="justify">Obs.: Se bloqueou o arquivo e não quer editar nada, digite apenas &#8220;<strong>rcs -u </strong>stl.cpp&#8221; para voltar.</p>
<pre class="brush: cpp;">

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;iterator&gt;

using namespace std;

int main(int argc, char *argv[]) {

vector&lt;string &gt; v;

v.insert(v.begin(), &quot;melão&quot;);
v.insert(v.begin(), &quot;banana&quot;);
v.insert(v.begin(), &quot;maça&quot;);
v.insert(v.begin(), &quot;laranja&quot;);
v.insert(v.begin(), &quot;uva&quot;);
v.insert(v.begin(), &quot;pêra&quot;);

copy(v.begin(), v.end(), ostream_iterator&lt;string&gt;(cout, &quot;\n&quot;));

return 0;

}
</pre>
<blockquote><p># <strong>ci </strong>stl.cpp<br />
RCS/stl.cpp,v &lt;&#8211; stl.cpp<br />
new revision: 1.2; previous revision: 1.1<br />
enter log message, terminated with single &#8216;.&#8217; or end of file:<br />
&gt;&gt; Inserido a função copy()<br />
&gt;&gt; Retirado os laços for(;;)<br />
&gt;&gt; .<br />
done</p></blockquote>
<p>Agora para alterar entre as modificações entre os arquivos utilize o comando <strong>rcsmerge</strong>:</p>
<blockquote><p># co -l stl.cpp<br />
RCS/stl.cpp,v &#8211;&gt; stl.cpp<br />
revision 1.2 (locked)<br />
# rcsmerge -r1.2 -r1.1 stl.cpp<br />
RCS file: RCS/stl.cpp,v<br />
retrieving revision 1.2<br />
retrieving revision 1.1<br />
Merging differences between 1.2 and 1.1 into stl.cpp</p></blockquote>
<p align="justify">Pronto, agora você pode alterar entre seus testes de programa de um jeito fácil e rápido.</p>
<p align="justify">&nbsp;</p>
<p align="justify">Quer mais informações? Há paginas no <em>man</em> para todos os comando citados acima (ci, co, rcsmerge, etc).</p>
<p align="justify">&nbsp;</p>
<p align="justify">Happy coding!</p>
<img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/escovandobits.wordpress.com/3/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/escovandobits.wordpress.com/3/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/escovandobits.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/escovandobits.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/escovandobits.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/escovandobits.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/escovandobits.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/escovandobits.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/escovandobits.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/escovandobits.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/escovandobits.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/escovandobits.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=escovandobits.wordpress.com&blog=2186857&post=3&subd=escovandobits&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://escovandobits.wordpress.com/2007/11/23/rcs-fooc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f615d34c675bc325d78631c8077f0187?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tiago Maluta</media:title>
		</media:content>
	</item>
	</channel>
</rss>