// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

= Usando Suporte para Filas do Mercurial no NetBeans IDE
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Usando Suporte para Filas do Mercurial no NetBeans IDE - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Usando Suporte para Filas do Mercurial no NetBeans IDE

O NetBeans IDE fornece suporte para a extensão de Filas do Mercurial. O suporte de Filas do Mercurial do IDE permite que você crie, revise ou alterne entre patches dentro do IDE, bem como renovar patches com modificações locais como você corrigir bugs ou atualizar para uma nova revisão de base. Este documento demonstra como executar tarefas básicas específicas de patch no IDE o orientando pelo workflow padrão ao usar o software de controle de versão do Mercurial para gerenciar patches.

== Requisitos

*Para concluir este tutorial, você precisa dos seguintes recursos e softwares.*

|===
|Software ou Recurso |Versão Necessária 

|link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |Versão 7.4 ou 8.0 

|link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java Development Kit+] (JDK) |Versão 7 ou 8 

|link:http://mercurial.selenic.com/downloads/[+Software do cliente do Mercurial+] |1.04 ou uma versão mais recente 
|===

NOTE:  Consulte link:mercurial.html#settingUp[+Usando o Suporte ao Mercurial no NetBeans IDE+] para obter informações sobre como instalar o software do cliente Mercurial no seu sistema.


== Ativando o Suporte de Filas do Mercurial

Como as Filas do Mercurial é uma extensão, você deve ativá-la antes de usá-la.
Para iniciar a execução de Filas do Mercurial em seu repositório do Mercurial, você precisa concluir as seguintes etapas:

1. Em seu sistema, procure o arquivo  ``.hgrc`` . A localização default do arquivo  ``.hgrc``  no OS X e Linux é  ``$HOME/.hgrc`` , no Windows -  ``%USERPROFILE%\Mercurial.ini`` .
2. Adicione as linhas abaixo em seu arquivo  ``.hgrc`` .

[source,ini]
----
     [extensions]
     hgext.mq =
----


. Salve o arquivo.




== Criando um Patch

Para criar um patch, é necessário concluir as etapas a seguir:

1. Na janela Projetos, selecione um projeto com controle de versão e escolha  ``Equipe``  >  ``Filas``  >  ``Criar Patch``  (se preferir, clique com o botão direito no nome do projeto e selecione  ``Mercurial``  >  ``Filas``  >  ``Criar Patch``  no menu pop-up).
A caixa de diálogo Criar Patch é exibida.

[.feature]
--
image::images/create-patch-small.png[role="left", link="images/create-patch.png"]
--


. Especifique o nome de um patch no campo de texto Nome do Patch.
. Forneça a descrição de um patch no campo Mensagem do Patch.
Se preferir, escolha uma das seguintes opções e clique em OK posteriormente:
* clique no botão Mensagens Recentes (image::images/recent.png[]) para selecionar uma mensagem de uma lista de mensagens de confirmação mais recentes
* clique no botão Carregar Modelo (image::images/load.png[]) para selecionar um modelo de mensagem de uma mensagem de confirmação.

NOTE:  A descrição fornecida de um patch será usada como uma mensagem de confirmação ao <<finish,transformar o patch em um conjunto de alterações permanente>>.


. Selecione os arquivos a serem incluídos no patch na tabela Arquivos a Serem Incluídos no Patch.
. (Opcional) Especifique informações pertinentes a um problema relacionado ao patch criado usando os campos da área Atualizar Problema.
. Clique em Criar Patch.
Um novo patch é criado e adicionado ao diretório  ``.hg/patches`` .




== Atualizando um Patch com Modificações Locais

Para salvar seu andamento no patch que você está criando, é necessário concluir as seguintes etapas:

1. Escolha  ``Equipe``  >  ``Filas``  >  ``Atualizar Patch``  do menu principal (se preferir, clique com o botão direito no nome do projeto e selecione  ``Mercurial``  >  ``Filas``  >  ``Atualizar Patch``  no menu pop-up).
A caixa de diálogo Atualizar Patch é exibida.

[.feature]
--
image::images/refresh-patch-small.png[role="left", link="images/refresh-patch.png"]
--


. Forneça a descrição de um patch no campo Mensagem do Patch.
Se preferir, escolha uma das seguintes opções e clique em OK posteriormente:
* clique no botão Mensagens Recentes (image::images/recent.png[]) para selecionar uma mensagem de uma lista de mensagens de confirmação mais recentes
* clique no botão Carregar Modelo (image::images/load.png[]) para selecionar um modelo de mensagem de uma mensagem de confirmação.

NOTE:  A descrição fornecida de um patch será usada como uma mensagem de confirmação ao <<finish,transformar o patch em um conjunto de alterações permanente>>.


. Selecione os arquivos a serem incluídos no patch na tabela Arquivos a Serem Incluídos no Patch.
. (Opcional) Na área Atualizar Problema, especifique as informações pertinentes a um problema relacionado às alterações que estão sendo confirmadas.
. Clique em Atualizar Patch.
O patch no qual você está trabalhando é atualizado.


== Comparando Revisões do Patch

Para gerar um patch para revisar e comparar as revisões de um patch lado a lado, você precisa concluir as seguintes etapas:

1. Escolha  ``Equipe``  > ( ``Filas``  >  ``Diferença``  do menu principal (se preferir, clique com o botão direito no nome do projeto e selecione  ``Mercurial``  >  ``Filas``  >  ``Atualizar Patch``  no menu pop-up).
O Visualizador de Diferença exibe as diferenças encontradas no patch atual e todas as alterações locais não confirmadas/não atualizadas nos painéis lado a lado:

[.feature]
--
image::images/qdiff-small.png[role="left", link="images/qdiff.png"]
--


. Revise as diferenças encontradas nos arquivos comparados usando o Visualizador de Diferenças Textual ou Gráfico.

NOTE:  O Visualizador Gráfico de Diferenciação é alterado nos arquivos usando a seguinte codificação colorida.

|===
|*Azul* (       ) |Indica as linhas alteradas desde o patch mais recente. 

|*Verde* (       ) |Indica as linhas adicionadas desde o patch anterior. 

|*Vermelho* (       ) |Indica as linhas removidas desde o patch anterior. 
|===

Os seguintes ícones permitem que você faça alterações diretamente no Visualizador Gráfico de Diferenciação.

|===
|Ícone |Nome |Função 

|image:images/replace.png[] |*Substituir* |Insere o texto realçado do patch anterior no patch atual. 

|image:images/replace-all.png[] |*Substituir Tudo* |Reverte a versão atual de um patch para o estado de sua versão anterior selecionada. 

|image:images/remove.png[] |*Remover* |Remove o texto destacado da versão atual de um patch, de forma que ele mostre a versão anterior de um patch. 
|===




== Alternando Entre Patches

Para alternar para um determinado patch em uma fila do Patch série, você precisa concluir as seguintes etapas:

NOTE:  para alternar entre patches _não_ deve haver_nenhuma_ modificação local na cópia de trabalho, caso contrário a alternância falha.

1. Escolha  ``Equipe``  >  ``Filas``  >  ``Ir para Patch``  no menu principal (se preferir, clique com o botão direito no nome do projeto e selecione  ``Mercurial``  >  ``Filas``  >  ``Ir para Patch``  no menu pop-up).
A caixa de diálogo Ir para Patch exibe uma lista de todos os patches disponíveis em uma pilha.

image::images/go-patch.png[]

*Observações:*

* Nomes de patches aplicados são exibidos em negrito.
* Escolha  ``Equipe``  >  ``Filas``  >  ``Exibir Todos os Patches``  para remover os patches aplicados na parte superior da pilha e atualizar o diretório de trabalho para desfazer os efeitos de os patches aplicados.


. Selecione o patch necessário e clique em Ir.
O IDE aplica as alterações contidas no patch selecionado para o projeto escolhido, arquivo ou pasta.




== Finalizando Patches Aplicados

Quando seu trabalho em um patch for concluído, ele pode ser transformado em um conjunto de alterações permanentes.
Transforme todos os patches aplicados em uma série de fila de patches em conjuntos de alterações regulares, conclua as seguintes etapas:

NOTE:  para aplicar todos os patches salvos no repositório, escolha  ``Equipe``  > ( ``Filas``  >  ``Extrair Todos os Patches``  no menu principal.

1. Escolha  ``Equipe``  > ( ``Filas``  >  ``Finalizar Patches``  no menu principal (se preferir, clique com o botão direito do mouse no nome do projeto e selecione  ``Mercurial``  >  ``Filas``  >  ``Finalizar Patches``  no menu pop-up).
A caixa de diálogo Finalizar Patches é exibida.

image::images/finish-patches.png[]


. Selecione o nome de um patch a ser finalizado no campo Patches.

NOTE:  todos os patches da série antes do patch selecionado também serão finalizados.


. Clique em Finalizar Patches.
O IDE transforma todos os patches aplicados até o patch selecionado em conjuntos de alterações regulares.




== Resumo

Este tutorial mostrou como executar tarefas básicas específicas de patch no IDE o orientando pelo workflow padrão ao usar o software de controle de versão do Mercurial para gerenciar patches. Ele demonstrou como ativar o suporte Filas do Mercurial no NetBeans IDE e executar tarefas básicas sobre patches ao introduzi-los em algumas funcionalidades específicas do Mercurial incluídos no IDE.



link:/about/contact_form.html?to=3&subject=Feedback:%20Using%20Suport%20For%20Mercurial%20Queues%20in%20NetBeans%20IDE[+Enviar Feedback neste Tutorial+]



== Consulte Também

Para ver o material relacionado, consulte os seguintes documentos:

* link:mercurial.html[+Usando Suporte ao Mercurial no NetBeans IDE+]
* link:http://wiki.netbeans.org/HgNetBeansSources[+Usando o Mercurial para Trabalhar com Códigos-fonte do NetBeans no IDE+]
* link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG234[+Aplicando Controle de Versão às Aplicações com Controle de Versão+] em _Desenvolvendo Aplicações com o NetBeans IDE_



