- If the report is for a regression:
- Include logs for both working and broken versions.
- Find the precise version that caused the regression by binary search.
- For example: if testing version 550 works but 600 fail, then try 575, etc.
+ You can use "git bisect" to expedite this binary search.
If possible, please develop and attach a patch that helps to expose or
solve the reported problem. See the PATCHES file for more information
@section Patch Guidelines in a Nutshell
-The patch should be against svn trunk using an SVN
-diff. If you use git-svn, a git diff or patch is OK
-too; likewise a quilt patch, if you use quilt.
+Your patches should be against git mainline. Submit output
+of "git diff"; equivalently, quilt patches are OK.
It should be a "good patch": focus it on a single
issue, and make it be easily reviewable. Don't make
To create a patch from the command line:
@code
- svn diff >mypatch.txt
+ git diff >mypatch.txt
@endcode
-See: @par
- http://svnbook.red-bean.com/en/1.0/re09.html
-
-Remember to use "svn add" on new files first: @par
- http://svnbook.red-bean.com/en/1.0/re01.html
-
-If you have a decent SVN GUI, then that should be
-able to create and apply patches as well...
-
@section More Information on Patching
The @ref primerpatches provides a more complete guide to creating,
-----------------------
If you would rather be working "with" OpenOCD rather than "on" it, your
-operating system or interface supplier may provide binaries for you in a
-convenient package.
+operating system or JTAG interface supplier may provide binaries for
+you in a convenient-enough package.
-Such packages should be more stable than SVN trunk, where bleeding-edge
+Such packages may be more stable than git mainline, where bleeding-edge
development takes place. These "Packagers" produce binary releases of
-OpenOCD after the developers produces new "stable" versions of the
-source code. Previous versions of OpenOCD cannot be used to diagnosed
+OpenOCD after the developers produces new "release" versions of the
+source code. Previous versions of OpenOCD cannot be used to diagnose
problems with the current release, so users are encouraged to keep in
contact with their distribution package maintainers or interface vendors
to ensure suitable upgrades appear regularly.
--enable-maintainer-mode enable make rules and dependencies not useful
(and sometimes confusing) to the casual installer
- NOTE: This option is *required* for SVN builds!
+ NOTE: This option is *required* for GIT builds!
It should *not* be used to build a release.
--enable-dummy Enable building the dummy JTAG port driver
Note that on Linux there is no good reason to use these FTDI binaries;
they are no faster (on Linux) than libftdi, and cause licensing issues.
-=================================
-Obtaining OpenOCD From Subversion
----------------------------------
+==========================
+Obtaining OpenOCD From GIT
+==========================
-You can download the current SVN version with an SVN client of your
-choice from the following repositories:
+You can download the current GIT version with a GIT client of your
+choice from the main repository:
- svn://svn.berlios.de/openocd/trunk
-or
- http://svn.berlios.de/svnroot/repos/openocd/trunk
+ git://openocd.git.sourceforge.net/gitroot/openocd/openocd
-Using the SVN command line client, you can use the following command to
-fetch the latest version (make sure there is no (non-svn) directory
-called "openocd" in the current directory):
+Using the GIT command line client, you might use the following command
+to set up a local copy of the current repository (make sure there is no
+directory called "openocd" in the current directory):
- svn checkout svn://svn.berlios.de/openocd/trunk openocd
+ git clone git://openocd.git.sourceforge.net/gitroot/openocd/openocd
-If you prefer GIT based tools, the git-svn package works too:
+Then you can update that at your convenience using
- git svn clone -s svn://svn.berlios.de/openocd
+ git pull
-Tips For Building From The Subversion Repository
-************************************************
+There is also a gitweb interface, which you can use either to browse
+the repository or to downlad arbitrary snapshots using HTTP:
+
+ http://openocd.git.sourceforge.net/git/gitweb.cgi?p=openocd/openocd
+
+Snapshots are compressed tarballs of the source tree, about 1.3 MBytes
+each at this writing.
+
+
+Tips For Building From a GIT Repository
+---------------------------------------
Building OpenOCD from a repository requires a recent version of the GNU
autotools (autoconf >= 2.59 and automake >= 1.9).
installation directory. Some of them also put the library and include
into a separate sys-root directory.
-If there is a new svn version of libusb-win32, you can build it as well.
+When the libusb-win32 repository is more current than its release code,
+you could build that instead.
These are the instruction from the libusb-win32 Makefile:
--with-ftd2xx-win32-zipdir=/path/to/libftd2xx-win32 \
... other options ...
-If you are using the SVN repository, see the README file for additional
+If you are using the GIT repository, see the README file for additional
instructions about configuring and building OpenOCD.
automake --gnu --add-missing --copy
)
-# AM_MAINTAINER_MODE requires SVN users provide --enable-maintainer-mode
+# AM_MAINTAINER_MODE requires --enable-maintainer-mode from everyone using
+# current source snapshots (working from GIT, or some source snapshot, etc)
# otherwise the documentation will fail to build due to missing version.texi
echo "Bootstrap complete; you can './configure --enable-maintainer-mode ....'"
@subsection primerbootstrapcures Problems Solved By Bootstrap
For example, the build system can fail in unexpected ways after running
-<code>svn update</code>. Here, the <code>make maintainer-clean</code>
+<code>git pull</code>. Here, the <code>make maintainer-clean</code>
should be used to remove all of the files generated by the @c bootstrap
script and subsequent build processes.
In this particular case, one may also need to remove stray files by hand
after running this command to ensure everything is rebuilt properly.
This step should be necessary only if the @c maintainer-clean was run
-@b after altering the build system files with Subversion. If it is run
+@b after altering the build system files with git. If it is run
@b before any updates, the build system should never leave artifacts
in the tree.
the problems. The isssue is well-known and expected, if unfortunate.
The OpenOCD project requires that all developers building from the
-Subversion repository use the @c --enable-maintainer-mode option when
+git repository use the @c --enable-maintainer-mode option when
running the @c configure script. This option ensures that certain files
are created during the build process that would normally be packaged in
the distribution tarball. The @c bootstrap script will remind you of
@section primerpatchintro Introduction to Patching
The standard method for creating patches requires developers to:
-- checkout the Subversion repository (or bring a copy up-to-date),
+- checkout the git repository (or bring a copy up-to-date),
- make the necessary modifications to a working copy,
-- check with 'svn status' to see which files will be modified/added, and
-- use 'svn diff' to review the changes and produce a patch.
+- check with 'git status' to see which files will be modified/added, and
+- use 'git diff' to review the changes and produce a patch.
It is important to minimize the changes to only those lines that contain
important differences; do not allow stray whitespace changes into your
You can create a patch (from the root of your working copy) with a
command like the following example: @par
@verbatim
-svn diff > patch-name.patch
+git diff > patch-name.patch
@endverbatim
where @a patch-name should be something that is descriptive and unique.
the working copy; if you want to obtain a subset, simply provide the
list of files to the command: @par
@verbatim
-svn diff doc > <patch-name>-doc.patch
-svn diff src > <patch-name>-src.patch
+git diff doc > <patch-name>-doc.patch
+git diff src > <patch-name>-src.patch
@endverbatim
This will create two patches, each containing only those changes present
@section primerpatchpreflight Developer Review
Before sending in patches, please make sure you have updated to the
-latest version of the trunk (using <code>svn up</code>) before creating
+latest version of the trunk (using <code>git pull</code>) before creating
your patch. This helps to increase the chances that it will apply
cleanly to the trunk. However, the content matters most.
-When creating a patch using "<code>svn diff</code>", Subversion will
+When creating a patch using "<code>git diff</code>", git will
produce a patch that contains all of the changes in your working copy.
To manage multiple changes at once, you either need one working copy per
patch, or you can specified specific files and directories when using
-<code>svn diff</code>. Overlapping patches will be discussed in the
+<code>git diff</code>. Overlapping patches will be discussed in the
next section.
-The remainder of this section provides
-
-@subsection primerpatchprops Subversion Properties
-
-The Subversion attributes of files can be examined with commands like the
-following: @par
-@verbatim
-$ svn pl README
-Properties on 'README':
- svn:eol-style
-$ svn pl tools/rlink_make_speed_table/rlink_make_speed_table.pl
-Properties on 'tools/rlink_make_speed_table/rlink_make_speed_table.pl':
- svn:executable
- svn:eol-style
-$
-@endverbatim
-
-@subsection primerpatchpropcrlf Native Line-endings
-
-Subversion checks out files marked with the attribute @c svn:eol-style
-set to @c native such that these files contain the default line ending
-style of the current host ('\\n' or '\\r\\n'). By using the proper line
-endings for different platforms, two different byte streams for the same
-file will be produced.
-
-@subsection primerpatchwincrlf Windows Patching Problems
-
-Because of the line-ending functionality, it may be correct when a fresh
-patch does not apply cleanly on the Windows platform. This is because
-patches are created by SVN with UNIX line endings, so the context and
-changes will not appear to match the files with Windows line endings.
-
-In other words, the following command may @b not succeed because @c foo
-has its @c svn:eol-style property set to @c native: @par
-@code
-svn diff foo | patch -R
-@endcode
-
-The following series of commands will work: @par
-@code
-svn diff foo | unix2dos | patch -R
-@endcode
-
-This is not a bug.
-
-@todo Does Subversion's treatment of line-endings for files marked with
-svn:eol-style=native continue to pose the problems described here, or
-has this been magically solved?
+@todo Does git's treatment of line-endings behave sanely?
+Basically, the repository should use newlines internally,
+and convert to/from CRLF on Windows etc.
@section primerpatchseries Patch Series
Packages such as @c patchutils, @c diffutils, and @c quilt are among
those that have proved themselves invaluable for these type of tasks.
-Others take their patch management a step further, tracking the
-Subversion repository with git-svn and employing GIT conventions and
-methodologies for development.
+Others take their patch management a step further, using stkgit or
+some other framework on top of git.
@subsection primerpatchseriesinterdiff Using @c interdiff
patch series. For example, the following sequence of commands will
produce three patches: @par
@verbatim
-$ cd openocd-head/
-$ svn up && svn st
-At revision NNNN.
+$ cd openocd/
+$ git pull
+...
$ <<<start changes for patch #1>>>
...
$ <<<finish changes for patch #1>>>
-$ svn diff > series-1.patch # patch #1 is easy
+$ git diff > series-1.patch # patch #1 is easy
$ <<<start changes for patch #2>>>
...
$ <<<finish changes for patch #2>>>
-$ svn diff > series-1+2.patch # create patch 1+2
+$ git diff > series-1+2.patch # create patch 1+2
$ interdiff series-1{,+2}.patch > series-2.patch # 1 ~ 1+2 => #2
$ <<<start changes for patch #3>>>
...
$ <<<finish changes for patch #3>>>
-$ svn diff > series-1+2+3.patch # create patch 1+2+3
+$ git diff > series-1+2+3.patch # create patch 1+2+3
$ interdiff series-1+2{,+3}.patch > series-3.patch # 1+2 ~ 1+2+3 => 3
@endverbatim
that require such patch management, @c quilt provides an indispensable
tool for solving the problem.
-@subsection primerpatchseriesgit Using @c git
-
-The @c git revision control system provides a tool for tracking
-Subversion repositories.
-
@section primerpatchsubmit Submitting Patches
-Write access to the OpenOCD Subversion repository is limited to
+Write access to the OpenOCD git repository is limited to
contributors that have demonstrated the ability to produce clear,
consistent, and frequent patches. These individuals are responsible
for maintaining the integrity of the repository for the community.
-Thus, commits to the Subversion repository must be handled by one of
+Thus, commits to the git repository must be handled by one of
these maintainers.
Patches must be sent to the OpenOCD developer mailing list:
produced properly, these files are suitable for release to the public.
When released for users, these archives present several important
-advantages when contrasted to using the Subversion repository trunk:
+advantages when contrasted to using the git repository:
-# They allow others to package and distribute the code.
-# They build easier for developers, because they contain
a working configure script that was produced by the Release Manager.
--# They prevent users from trying a random HEAD revision of the trunk.
--# They free developers from answering questions about trunk breakage.
+-# They prevent users from trying a random work-in-process revision.
+-# They free developers from answering questions about mainline breakage.
Hopefully, this shows several good reasons to produce regular releases,
but the release processes were developed with some additional design
After these required numeric components, the version string may contain
one or more <i>version tags</i>, such as '-rc1' or '-dev'.
-The trunk and all branches should have the tag '-dev' in
+Mainline and all branches should have the tag '-dev' in
their version number. This tag helps developers identify reports
-created from the Subversion repository, and it can be detected and
+created from the git repository, and it can be detected and
manipulated by the release script. Specifically, this tag will be
removed and re-added during the release process; it should never be
manipulated by developers in submitted patches.
might describe some of the key milestones of the new release cycle:
- T minus one month: start of new development cycle
-- T minus two weeks: announce pending trunk closure to new work
-- T minus one week: close trunk to new work, begin testing phase
+- T minus two weeks: announce pending mainline closure to new work
+- T minus one week: close mainline to new work, begin testing phase
- T minus two days: call for final bug fixes
- T minus one day: produce -rc packages and distribute to testers
- T minus one hour: produce final packages and post on-line
The following steps should be followed to produce each release:
--# Produce final patches to the trunk (or release branch):
+-# Produce final patches to mainline (or release branch):
-# Finalize @c NEWS file to describe the changes in the release
- This file is Used to automatically post "blurbs" about the project.
- This material should be produced during the development cycle.
- Add a new item for each @c NEWS-worthy contribution, when committed.
-# bump library version if our API changed (not yet required)
-# Remove -dev tag from package version in configure.in:
- - For major/minor releases, remove version tag from trunk, @a or
+ - For major/minor releases, remove version tag from mainline, @a or
- For bug-fix releases, remove version tag from release branch.
--# Branch or tag the required tree in the Subversion repository:
+-# Branch or tag the required tree in the git repository:
- Tags and branches for releases must be named consistently: @par
"${PACKAGE_TARNAME}-${PACKAGE_VERSION}"
- - For a major/minor release from the main trunk, the code should be
- branched and tagged in the repository:
+ - For a major/minor release from the mainline, the code should be
+ tagged in the repository:
@verbatim
svn cp .../trunk .../branches/${RELEASE_BRANCH}
svn cp .../branches/${RELEASE_BRANCH} .../tags/${RELEASE_TAG}
-# Prepare to resume normal development activities:
- Archive @c NEWS file as <code>doc/news/NEWS-${PACKAGE_VERSION}</code>.
- Create a new @c NEWS file for the next release
- - For major/minor release from the trunk:
- -# Bump major or minor package version in trunk.
- -# Restore version tag to trunk and release branch.
+ - For major/minor release from the mainline:
+ -# Bump major or minor package version in mainline.
+ -# Restore version tag to mainline.
- For bug-fix releases from a release branch:
-# Bump bug-fix version in release branch.
-# Restore version tag to release branch.
Repository Commands:
commit Perform branch and tag, as appropriate for the version.
- branch Create a release branch from the project trunk.
+ branch Create a release branch from project mainline.
tag Create a tag for the current release branch.
Other Commands:
and it produces archives that are unsuitable for public release.
@note Only the Release Manager should use the @c --live option, as
-it will make permanent changes to the Subversion repository that
+it will make permanent changes to the git repository that
cannot be undone.
@subsection releasescriptenv Release Script Environment
If the proper environment has been set, the following steps will produce
a new minor release:
--# Check out (or update) the project trunk from the berliOS repository:
+-# Check out (or update) mainline from the repository:
@code
svn checkout "${SVN_URL}/trunk" openocd-trunk
@endcode
- limit adjacent empty lines to at most two (2).
- remove any trailing empty lines at the end of source files
- do not "comment out" code from the tree; instead, one should either:
- -# remove it entirely (Subversion can retrieve the old version), or
+ -# remove it entirely (git can retrieve the old version), or
-# use an @c \#if/\#endif block.
Finally, try to avoid lines of code that are longer than than 72-80 columns:
Maintainers must also be sure to follow additional guidelines:
-# Ensure that Perl scripts are committed as executables:
- - Use "<code>chmod +x script.pl</code>"
- @a before using "<code>svn add script.pl</code>", or
- - Use "<code>svn ps svn:executable '*' script.pl</code>"
- @a after using "<code>svn add script.pl</code>".
+ Use "<code>chmod +x script.pl</code>"
+ @a before using "<code>git add script.pl</code>"
*/
/** @page styleautotools Autotools Style Guide
The resources in this chapter are available for developers wishing to explore
or expand the OpenOCD source code.
-@section OpenOCD Subversion Repository
+@section OpenOCD GIT Repository
-You can download the current SVN version with an SVN client of your
-choice from the following repositories:
+During the 0.3.x release cycle, OpenOCD switched from Subversion to
+a GIT repository hosted at SourceForge. The repository URL is:
- @uref{svn://svn.berlios.de/openocd/trunk}
+@uref{git://openocd.git.sourceforge.net/gitroot/openocd/openocd}
-or
+With standard GIT tools, use @command{git clone} to initialize
+a local repository, and @command{git pull} to update it.
+There are also gitweb pages letting you browse the repository
+with a web browser, or download arbitrary snapshots without
+needing a GIT client:
- @uref{http://svn.berlios.de/svnroot/repos/openocd/trunk}
+@uref{http://openocd.git.sourceforge.net/git/gitweb.cgi?p=openocd/openocd}
-Using the SVN command line client, you can use the following command to
-fetch the latest version (make sure there is no (non-svn) directory
-called "openocd" in the current directory):
-
- svn checkout svn://svn.berlios.de/openocd/trunk openocd
-
-If you prefer GIT based tools, the @command{git-svn} package works too:
-
- git svn clone -s svn://svn.berlios.de/openocd
-
-The ``README'' file contains the instructions for building the project
-from the repository.
+The @file{README} file contains the instructions for building the project
+from the repository or a snapshot.
Developers that want to contribute patches to the OpenOCD system are
-@b{strongly} encouraged to base their work off of the most recent trunk
-revision. Patches created against older versions may require additional
+@b{strongly} encouraged to work against mainline.
+Patches created against older versions may require additional
work from their submitter in order to be updated for newer releases.
@section Doxygen Developer Manual
-During the development of the 0.2.0 release, the OpenOCD project began
+During the 0.2.x release cycle, the OpenOCD project began
providing a Doxygen reference manual. This document contains more
technical information about the software internals, development
processes, and similar documentation:
This document is a work-in-progress, but contributions would be welcome
to fill in the gaps. All of the source files are provided in-tree,
-listed in the Doxyfile configuration in the top of the repository trunk.
+listed in the Doxyfile configuration in the top of the source tree.
@section OpenOCD Developer Mailing List
@uref{https://lists.berlios.de/mailman/listinfo/openocd-development}
-All drivers developers are enouraged to also subscribe to the list of
-SVN commits to keep pace with the ongoing changes:
-
-@uref{https://lists.berlios.de/mailman/listinfo/openocd-svn}
+Discuss and submit patches to this list.
+The @file{PATCHES} file contains basic information about how
+to prepare patches.
@node JTAG Hardware Dongles
print_version();
- LOG_OUTPUT("For bug reports, read http://svn.berlios.de/svnroot/repos/openocd/trunk/BUGS\n");
+ LOG_OUTPUT("For bug reports, read\n\t"
+ "http://openocd.berlios.de/doc/doxygen/bugs.html"
+ "\n");
command_context_mode(cmd_ctx, COMMAND_CONFIG);
<body>
<h1>Release testing</h1>
- A release test must be done on code committed to svn. Commit, then test. That way one can know for sure *what* code was actually tested.
+ A release test must be done on code committed to git.
+ Commit, then test. That way one can know for sure *what* code was actually tested.
<p>
Note that this testing document does not have anything to do with testing that is done
- before committing to svn. It is a test document for released code. Pre-commit testing
+ before committing to git. It is a test document for released code. Pre-commit testing
is done mostly by the developer who has written the change. Sometimes code is committed
to synchronize work, even if it has known problems. Release testing is
done on code believed to be stable, often a couple of weeks old, and not by
All of the above makes it imperative that there can be no doubt about *which* code
is tested and thus all tests refer to committed code by subversion number.
<h1>Release procedure</h1>
- OpenOCD trunk is work in progress. Expect it to change daily and to have some quirks.
+ OpenOCD mainline is work in progress.
+ Expect it to change daily and to have some quirks.
<p>If you need the latest released and tested version, look for binary snapshots of OpenOCD. Worst case look up the test result table below for the features that are important to you and extract and build the version that has the right cocktail of working features for you. You can also work with the community to address the problems you are seing. Testing work and bug reports are highly appreciated.</p>
- <p>The OpenOCD community may decide to create release branches. If this happens, then a branch will be created from OpenOCD trunk. The particular version to create that branch might be an older version rather than the latest and greatest. Fixes are then ported to that release branch from OpenOCD trunk.</p>
+ <p>The OpenOCD community may decide to create release branches. If
+ this happens, then a branch will be created from OpenOCD mainline.
+ The particular version to create that branch might be an older version
+ rather than the latest and greatest. Fixes are then ported to that
+ release branch from OpenOCD mainline.</p>
<hr>
<h2>OpenOCD smoketests</h2>
This is a set of tests that exercise the entire OpenOCD system and various targets. It
<a href="testcases.html">Test cases</a>
</body>
-</html>
\ No newline at end of file
+</html>
<body>
<h1>OpenOCD smoketest results</h1>
- These tests can be performed on any JTAG device as long as they are executed using the unmodified code from SVN.
+ These tests can be performed on any JTAG device as long as they are
+ executed using the unmodified code from git.
<p>The latest version in which the test is known to have passed is in the table below.</p>
<h2>Vocabulary</h2>
<table border="1">
<p></p>
<hr>
<h1>Policy on removing features from OpenOCD</h1>
- If a feature in OpenOCD is known to be broken and nobody has submitted a fix and the feature is causing trouble for maintainence, it can be removed from OpenOCD trunk. The threshold for temporarily removing something from OpenOCD trunk is low to ease maintainence and place the burden of maintainence on those that care about a feature.
- <p>Note that code is never deleted from OpenOCD svn, it remains in svn so if somebody sees a feature removed that they would like kept, they have but to port and fix that feature back up to main trunk. This document can be helpful in this regard in that the latest working version and the known broken version may be listed.</p>
+ If a feature in OpenOCD is known to be broken and nobody has submitted
+ a fix and the feature is causing trouble for maintainence, it can be
+ removed from OpenOCD mainline. The threshold for temporarily removing
+ something from OpenOCD mainline is low to ease maintainence and place the burden of maintainence on those that care about a feature.
+ <p>Note that code is never deleted from OpenOCD git, it remains in the
+ repository so if somebody sees a feature removed that they would like
+ kept, they have but to port and fix that feature back up to main
+ mainline. This document can be helpful in this regard in that the latest working version and the known broken version may be listed.</p>
<h1>Policy on adding features from OpenOCD</h1>
- To add a feature to OpenOCD, generally it should not break any existing features and it should be functional and the code reasonably readable and useful to others in the OpenOCD community. The code does not have to be completed. Work in progress is fine for OpenOCD trunk.
+ To add a feature to OpenOCD, generally it should not break any
+ existing features and it should be functional and the code reasonably
+ readable and useful to others in the OpenOCD community. The code does
+ not have to be completed. Work in progress is fine for OpenOCD
+ mainline.
<p>Also new tests should be defined. Note that the code does not have to pass all the tests. In fact it can be helpful to have tests to describe facets that really should be working, but aren't done yet. </p>
<hr>
<h1>ocd4 - ARM7 debugging<a name="test_ocd4"></a></h1>
<p></p>
</body>
-</html>
\ No newline at end of file
+</html>