[svnbook-pt-br commit] r300 - trunk/book
codesite-noreply at google.com
codesite-noreply at google.com
Sun Nov 23 23:47:22 CST 2008
Author: brunolmfg
Date: Sun Nov 23 21:46:54 2008
New Revision: 300
Modified:
trunk/book/ch08-embedding-svn.xml
Log:
Tradução do capítulo 8, seção:
* Usando as APIs
- Usando Outras Linguagens além de C e C++ (até linha 1087)
Modified: trunk/book/ch08-embedding-svn.xml
==============================================================================
--- trunk/book/ch08-embedding-svn.xml (original)
+++ trunk/book/ch08-embedding-svn.xml Sun Nov 23 21:46:54 2008
@@ -941,31 +941,31 @@
<!-- ===============================================================
-->
<sect2 id="svn.developer.usingapi.codesamples">
- <title>Code Samples</title>
+ <title>Exemplos de Código</title>
<para><xref linkend="svn.developer.layerlib.repos.ex-1" />
- contains a code segment (written in C) that illustrates some
- of the concepts we've been discussing. It uses both the
- repository and filesystem interfaces (as can be determined by
- the prefixes <literal>svn_repos_</literal> and
- <literal>svn_fs_</literal> of the function names,
- respectively) to create a new revision in which a directory is
- added. You can see the use of an APR pool, which is passed
- around for memory allocation purposes. Also, the code reveals
- a somewhat obscure fact about Subversion error
- handling—all Subversion errors must be explicitly
- handled to avoid memory leakage (and in some cases,
- application failure).</para>
+ contém um segmento de código (escrito em C) que ilustra alguns
+ dos conceitos que estamos discutindo. Ele usa ambas as
+ interfaces de repositório e sistema de arquivo (como pode ser
determinado pelos
+ prefixos <literal>svn_repos_</literal> e
+ <literal>svn_fs_</literal> dos nomes de função,
+ respectivamente) para criar uma nova revisão na qual um diretório é
+ adicionado. Você pode ver o uso de um recipiente APR, o qual é
passado
+ para propósitos de alocação de memória. Além disso, o código
revela
+ um fato um tanto obscuro sobre tratamento de erros do
+ Subversion—todos os erros do Subversion devem ser
explicitamente
+ tratados para evitar vazamento de memória (e em alguns casos,
+ falha da aplicação).</para>
<example id="svn.developer.layerlib.repos.ex-1">
- <title>Using the Repository Layer</title>
+ <title>Usando a Camada do Repositório</title>
<programlisting>
-/* Convert a Subversion error into a simple boolean error code.
+/* Converte um erro do Subversion em um simples código de erro booleano.
*
- * NOTE: Subversion errors must be cleared (using svn_error_clear())
- * because they are allocated from the global pool, else memory
- * leaking occurs.
+ * NOTA: Erros do Subversion devem ser limpos (usando svn_error_clear())
+ * porque eles são alocados a partir do recipiente global, senão
+ * vazamento de memória ocorre.
*/
#define INT_ERR(expr) \
do { \
@@ -978,11 +978,11 @@
return 0; \
} while (0)
-/* Create a new directory at the path NEW_DIRECTORY in the Subversion
- * repository located at REPOS_PATH. Perform all memory allocation in
- * POOL. This function will create a new revision for the addition of
- * NEW_DIRECTORY. Return zero if the operation completes
- * successfully, non-zero otherwise.
+/* Cria um novo diretório no caminho NEW_DIRECTORY no repositório
Subversion
+ * localizado em REPOS_PATH. Realiza toda a alocação de memória em POOL.
+ * Esta função criará uma nova revisão para a adição de NEW_DIRECTORY.
+ * Retorna zero se a operação foi concluída com sucesso, não-zero caso
+ * contrário.
*/
static int
make_new_directory(const char *repos_path,
@@ -997,65 +997,65 @@
svn_fs_root_t *txn_root;
const char *conflict_str;
- /* Open the repository located at REPOS_PATH.
+ /* Abre o repositório localizado em REPOS_PATH.
*/
INT_ERR(svn_repos_open(&repos, repos_path, pool));
- /* Get a pointer to the filesystem object that is stored in REPOS.
+ /* Obtém um ponteiro para o objeto de sistema de arquivo armazenado em
REPOS.
*/
fs = svn_repos_fs(repos);
- /* Ask the filesystem to tell us the youngest revision that
- * currently exists.
+ /* Pede ao sistema de arquivo para nos retornar a mais jovem revisão que
+ * existe atualmente.
*/
INT_ERR(svn_fs_youngest_rev(&youngest_rev, fs, pool));
- /* Begin a new transaction that is based on YOUNGEST_REV. We are
- * less likely to have our later commit rejected as conflicting if we
- * always try to make our changes against a copy of the latest snapshot
- * of the filesystem tree.
+ /* Inicia uma nova transação que tem por base a YOUNGEST_REV. Nós
estamos
+ * menos prováveis de ter nossa submissão rejeitada como conflitante se
+ * sempre tentarmos fazer nossas mudanças novamente em uma cópia da
última
+ * imagem da árvore do sistema de arquivo.
*/
INT_ERR(svn_fs_begin_txn(&txn, fs, youngest_rev, pool));
- /* Now that we have started a new Subversion transaction, get a root
- * object that represents that transaction.
+ /* Agora que temos iniciada uma nova transação Subversion, recupera um
objeto
+ * raíz que representa esta transação.
*/
INT_ERR(svn_fs_txn_root(&txn_root, txn, pool));
- /* Create our new directory under the transaction root, at the path
+ /* Cria nosso novo diretório sob a transação raíz, para o caminho
* NEW_DIRECTORY.
*/
INT_ERR(svn_fs_make_dir(txn_root, new_directory, pool));
- /* Commit the transaction, creating a new revision of the filesystem
- * which includes our added directory path.
+ /* Submete a transação, criando uma nova revisão do sistema de arquivo
+ * a qual inclui o caminho de nosso diretório adicionado.
*/
err = svn_repos_fs_commit_txn(&conflict_str, repos,
&youngest_rev, txn, pool);
if (! err)
{
- /* No error? Excellent! Print a brief report of our success.
+ /* Sem erro? Excelente! Imprime um breve relatório de nosso
sucesso.
*/
- printf("Directory '%s' was successfully added as new revision "
+ printf("O diretório '%s' foi adicionado com sucesso na nova revisão "
"'%ld'.\n", new_directory, youngest_rev);
}
else if (err->apr_err == SVN_ERR_FS_CONFLICT)
{
- /* Uh-oh. Our commit failed as the result of a conflict
- * (someone else seems to have made changes to the same area
- * of the filesystem that we tried to modify). Print an error
- * message.
+ /* Oh não. Nossa submissão falhou como resultado de um conflito
+ * (alguém parece ter feito mudanças na mesma área do sistema de
+ * arquivo que nós tentamos modificar). Imprime uma mensagem de
+ * erro.
*/
- printf("A conflict occurred at path '%s' while attempting "
- "to add directory '%s' to the repository at '%s'.\n",
+ printf("Um conflito ocorreu no caminho '%s' na tentativa de "
+ "adicionar o diretório '%s' no repositório em '%s'.\n",
conflict_str, new_directory, repos_path);
}
else
{
- /* Some other error has occurred. Print an error message.
+ /* Algum outro erro ocorreu. Imprime uma mensagem de erro.
*/
- printf("An error occurred while attempting to add directory '%s' "
- "to the repository at '%s'.\n",
+ printf("Um erro ocorreu na tentativa de adicionar o diretório '%s' "
+ "no repositório em '%s'.\n",
new_directory, repos_path);
}
@@ -1064,27 +1064,27 @@
</programlisting>
</example>
- <para>Note that in <xref
- linkend="svn.developer.layerlib.repos.ex-1" />, the code could
- just as easily have committed the transaction using
- <function>svn_fs_commit_txn()</function>. But the filesystem
- API knows nothing about the repository library's hook
- mechanism. If you want your Subversion repository to
- automatically perform some set of non-Subversion tasks every
- time you commit a transaction (like, for example, sending an
- email that describes all the changes made in that transaction
- to your developer mailing list), you need to use the
- libsvn_repos-wrapped version of that function, which adds the
- hook triggering functionality—in this case,
- <function>svn_repos_fs_commit_txn()</function>. (For more
- information regarding Subversion's repository hooks, see <xref
+ <para>Note que em <xref
+ linkend="svn.developer.layerlib.repos.ex-1" />, o código poderia
+ ter apenas tão facilmente submetido a transação usando
+ <function>svn_fs_commit_txn()</function>. Mas a API do sistema de
+ arquivo sabe nada sobre o mecanismo de gancho da biblioteca do
+ repositório. Se você quer que seu repositório Subversion
+ realize automaticamente algum conjunto de tarefas não-Subversion
toda
+ vez que você submeter uma transação (como, por exemplo, enviar um
+ email que descreve todas as mudanças feitas nesta transação
+ para sua lista de discussão de desenvolvedores), você precisa usar
a
+ versão desta função embrulhada em libsvn_repos, a qual adiciona a
+ funcionalidade de disparo de gancho—neste caso,
+ <function>svn_repos_fs_commit_txn()</function>. (Para mais
+ informações em relação aos ganchos de repositório Subversion, veja
<xref
linkend="svn.reposadmin.create.hooks" />.)</para>
- <para>Now let's switch languages. <xref
- linkend="svn.developer.usingapi.otherlangs.ex-1" /> is a
- sample program that uses Subversion's SWIG Python bindings to
- recursively crawl the youngest repository revision, and print
- the various paths reached during the crawl.</para>
+ <para>Agora vamos trocar as linguagens. <xref
+ linkend="svn.developer.usingapi.otherlangs.ex-1" /> é um
+ exemplo de programa que usa os vínculos Python SWIG do Subversion
para
+ recursivamente rastrear a mais jovem revisão do repositório, e
imprimir
+ os vários caminhos descobertos durante o rastreamento.</para>
<example id="svn.developer.usingapi.otherlangs.ex-1">
<title>Using the Repository Layer with Python</title>
More information about the svn-pt_br
mailing list