<?xml version="1.0" encoding="UTF-8"?>
<!-- Search for CHANGEME in this document when copying and using it: -->
<!--

    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.

-->
<?xml-stylesheet type="text/xml" href="../../nbbuild/javadoctools/apichanges.xsl"?>
<!DOCTYPE apichanges PUBLIC "-//NetBeans//DTD API changes list 1.0//EN" "../../nbbuild/javadoctools/apichanges.dtd">

<!--

INFO FOR PEOPLE ADDING CHANGES:

Check the DTD (apichanges.dtd) for details on the syntax. You do not
need to regenerate the HTML, as this is part of Javadoc generation; just
change the XML. Rough syntax of a change (several parts optional):

<change>
    <api name="compiler"/>
    <summary>Some brief description here, can use <b>XHTML</b></summary>
    <version major="1" minor="99"/>
    <date day="13" month="6" year="2001"/>
    <author login="jrhacker"/>
    <compatibility addition="yes"/>
    <description>
        The main description of the change here.
        Again can use full <b>XHTML</b> as needed.
    </description>
    <class package="org.openide.compiler" name="DoWhatIWantCompiler"/>
    <issue number="14309"/>
</change>

Also permitted elements: <package>, <branch>. <version> is API spec
version, recommended for all new changes. <compatibility> should say
if things were added/modified/deprecated/etc. and give all information
related to upgrading old code. List affected top-level classes and
link to issue numbers if applicable. See the DTD for more details.

Changes need not be in any particular order, they are sorted in various
ways by the stylesheet anyway.

Dates are assumed to mean "on the trunk". If you *also* make the same
change on a stabilization branch, use the <branch> tag to indicate this
and explain why the change was made on a branch in the <description>.

Please only change this file on the trunk! Rather: you can change it
on branches if you want, but these changes will be ignored; only the
trunk version of this file is important.

Deprecations do not count as incompatible, assuming that code using the
deprecated calls continues to see their documented behavior. But do
specify deprecation="yes" in <compatibility>.

This file is not a replacement for Javadoc: it is intended to list changes,
not describe the complete current behavior, for which ordinary documentation
is the proper place.

-->

<apichanges>

    <!-- First, a list of API names you may use: -->
    <apidefs>
        <apidef name="gitlibrary_api">Git Library</apidef>
        <!-- etc. -->
    </apidefs>

    <!-- ACTUAL CHANGES BEGIN HERE: -->

    <changes>
        
        <change>
            <api name="gitlibrary_api"/>
            <summary>API for git stash support.</summary>
            <version major="1" minor="31"/>
            <date day="19" month="12" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                    <li>Adding few new GitClient's methods handling the git stash support.
                    The API supports creating and applying patches and deleting and listing saved patches.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <issue number="249326"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>Passing messages from running commands to the caller.</summary>
            <version major="1" minor="30"/>
            <date day="11" month="12" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                    <li>ProgressMonitor now delivers also informational messages from running commands.
                    This is useful to obtain messages during e.g. push process when a remote repository
                    notifies about run push hooks.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git.progress" name="ProgressMonitor"/>
            <issue number="233106"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>New method exporting a diff between two arbitrary commits or trees.</summary>
            <version major="1" minor="29"/>
            <date day="27" month="10" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                    <li>Adding new variant of GitClient.exportDiff which works for any
                    two arbitrary commits. It is also possible to diff between a commit and the working tree
                    or the Index.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <issue number="248002"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>New method for updating a reference (branch) to a new commit id.</summary>
            <version major="1" minor="27"/>
            <date day="1" month="7" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                    <li>New method GitClient.cherryPick used to cherry-pick commits and apply them in the
                    current branch. The command may interrupt its progress and require some user actions
                    (such as resolve conflicts or commit) and may be continued with different kinds
                    of operation types passed as its arguments.</li>
                    <li>Introduciong new repository state: CHERRY_PICKING and CHERRY_PICKING_RESOLVED
                    marking the states of the repository when a cherry-picking is not finished or
                    it requires resolving conflicts.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <class package="org.netbeans.libs.git" name="GitCherryPickResult"/>
            <class package="org.netbeans.libs.git" name="GitRepositoryState"/>
            <issue number="235267"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>New method for updating a reference (branch) to a new commit id.</summary>
            <version major="1" minor="26"/>
            <date day="25" month="6" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                    <li>Git client accepts the parameter telling the merge command how
                    to proceed with regard to fast-forward commits. Users may require
                    either to enforce or to completely eliminate (and always create a merge commit)
                    fast-forward merges.</li>
                    <li>Git Repository instance allows users to query for the current default fast-forward
                    option via a new getter method.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitRepository"/>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <class package="org.netbeans.libs.git" name="GitMergeResult"/>
            <issue number="245236"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>New method for updating a reference (branch) to a new commit id.</summary>
            <version major="1" minor="24"/>
            <date day="23" month="6" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <p>In order to simplify a trivial use-case of merging a remote branch into a local branch
                    not currently checked-out we're adding a new method able to update the local branch to
                    the new id. It is possible only if the branch requires a fast-forward merge (does not
                    contain any unpushed commits).
                </p>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <issue number="245078"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>New methods in ProgressMonitor informing about the progress of command's subtasks.</summary>
            <version major="1" minor="21"/>
            <date day="4" month="3" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <p>When a long running git command is invoked it usually calls subtasks playing a smaller execution role
                    (e.g. counting remote objects and actual data fetching during fetch command). Git API is now able to pass
                    messages from these subtasks to an API client to let it update a progress bar and UI.
                </p>
            </description>
            <class package="org.netbeans.libs.git.progress" name="ProgressMonitor"/>
            <issue number="242370"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>File status provides also information about the last index entry modification timestamp.</summary>
            <version major="1" minor="19"/>
            <date day="18" month="2" year="2014"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <p>It may be useful to know when was the last time a file was updated in the index. <code>GitStatus</code> now
                provides this value via <code>getIndexEntryModificationDate</code>.</p>
            </description>
            <class package="org.netbeans.libs.git" name="GitStatus"/>
            <issue number="241798"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>The log command returns also branches containing the commits from the result.</summary>
            <version major="1" minor="16"/>
            <date day="31" month="10" year="2013"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                <li>Adding new methods to GitClient allowing users to check a submodule's status, initialize them
                    after a clone and update them to a commit relevant to the state in the parent repository.</li>
                <li>Adding a new class GitSubmoduleStatus wrapping information about a submodule.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <class package="org.netbeans.libs.git" name="GitSubmoduleStatus"/>
            <issue number="237621"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>The log command returns also branches containing the commits from the result.</summary>
            <version major="1" minor="14"/>
            <date day="25" month="9" year="2013"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                <li>Adding a new method GitClient.log (SearchCriteria, boolean, ProgressMonitor)
                    allowing an API client to specify if he wants to know what branches contain
                    the returned commits applying the search criteria. Such information can
                    be used to filter the resulted commits by branches without a need to restart
                    the command again.</li>
                <li>Adding a method GitRevisionInfo.getBranches() returning all branches
                that are known to contain the commit.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <class package="org.netbeans.libs.git" name="GitRevisionInfo"/>
            <issue number="235882"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>Adding a command setting the upstream branch/tracking of local branches</summary>
            <version major="1" minor="12"/>
            <date day="22" month="8" year="2013"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <p>Adding a new method GitClient.setUpstreamBranch(String, String, ProgressMonitor)
                    allowing an API client to set the tracking/upstream branch for a local branch.
                </p>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <issue number="234391"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>Adding support comparing trees of arbitrary commits</summary>
            <version major="1" minor="9"/>
            <date day="12" month="3" year="2013"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                    <li>Adding a new method GitClient.getStatus(File[], String, ProgressMonitor)
                    allowing an API client to get statuses of local files not just against the HEAD but against
                    an arbitrary commit.</li>
                    <li>Adding a new method GitClient.getStatus(File[], String, String, ProgressMonitor)
                    allowing an API client to get modifications from the Git history. It is similar to
                    GitRevisionInfo.getModifications but returns file statuses between two arbitrary commits
                    and not just a commit and its parent.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <issue number="227348"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>Adding support for rebase to the API</summary>
            <version major="1" minor="8"/>
            <date day="11" month="3" year="2013"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                <ul>
                    <li>Adding a new method GitClient.rebase delegating to the rebase command.</li>
                </ul>
            </description>
            <class package="org.netbeans.libs.git" name="GitClient"/>
            <class package="org.netbeans.libs.git" name="GitRebaseResult"/>
            <issue number="226545"/>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>Adding new method to GitClient: commit(), amending the last commit</summary>
            <version major="1" minor="7"/>
            <date day="6" month="2" year="2013"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                Git supports commit amendments, in other words modifying the last commit and changing its
                commit message or modified files. Another commit method allows API clients to specify
                either to amend the last commit or to make a fresh new commit on top of current HEAD.
            </description>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>Adding new method to GitClient: release()</summary>
            <version major="1" minor="5"/>
            <date day="16" month="11" year="2012"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                JGit repository normally does not close all opened file descriptors
                and prevents external commands from working with the same repository.
                Clients of the JGit API are supposed to call JGitRepository.close()
                when they're done with the repository. We need to pass this method to the 
                Git Library API so when clients are done with calling all required commands
                the library closes all descriptors and frees the git metadata files
                for other tools.
            </description>
        </change>
        <change>
            <api name="gitlibrary_api"/>
            <summary>Initial version of the API</summary>
            <version major="1" minor="0"/>
            <date day="11" month="3" year="2012"/>
            <author login="ovrabec"/>
            <compatibility addition="yes"/>
            <description>
                
            </description>
        </change>
    </changes>

    <!-- Now the surrounding HTML text and document structure: -->

    <htmlcontents>
<!--

                            NO NO NO NO NO!

         ==============>    DO NOT EDIT ME!  <==============

          AUTOMATICALLY GENERATED FROM APICHANGES.XML, DO NOT EDIT

                SEE CHANGEME/apichanges.xml

-->
    <head>
      <title>Change History for the Git Library API</title>
      <link rel="stylesheet" href="prose.css" type="text/css"/>
    </head>
    <body>

<p class="overviewlink"><a href="overview-summary.html">Overview</a></p>

<h1>Introduction</h1>

<p>This document lists changes made to the Git Library API.</p>

<!-- The actual lists of changes, as summaries and details: -->

      <hr/><standard-changelists module-code-name="org.netbeans.libs.git"/>

      <hr/><p>@FOOTER@</p>

    </body>
  </htmlcontents>

</apichanges>
