Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F166874588
D10993.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
23 KB
Referenced Files
None
Subscribers
None
D10993.diff
View Options
Index: en_US.ISO8859-1/articles/committers-guide/article.xml
===================================================================
--- en_US.ISO8859-1/articles/committers-guide/article.xml
+++ en_US.ISO8859-1/articles/committers-guide/article.xml
@@ -548,8 +548,10 @@
<filename><replaceable>/usr/src/</replaceable></filename>,
which can be any target directory on the local filesystem.
Omitting the final argument of that command causes the
- working copy, in this case, to be named <quote>head</quote>,
- but that can be renamed safely.</para>
+ working copy, in this case <quote>head</quote>, to be
+ checked out in a directory also named
+ <filename>head</filename>, but that can be renamed
+ safely.</para>
<para><literal>svn+ssh</literal> means the
<acronym>SVN</acronym> protocol tunnelled over
@@ -581,8 +583,8 @@
</sect3>
<sect3 xml:id="svn-getting-started-base-layout">
- <title><literal>RELENG_*</literal> Branches and General
- Layout</title>
+ <title>&os; Base System, <literal>RELENG_*</literal> Branches
+ and General Layout</title>
<para>In <literal>svn+ssh://repo.freebsd.org/base</literal>,
<emphasis>base</emphasis> refers to the source tree.
@@ -765,8 +767,8 @@
<para>Expanding the working copy is possible. Just change the
depth of the various subdirectories:</para>
- <screen>&prompt.user; <userinput>svn up --set-depth=infinity base/head</userinput>
-&prompt.user; <userinput>svn up --set-depth=immediates base/release base/releng base/stable</userinput></screen>
+ <screen>&prompt.user; <userinput>svn update --set-depth=infinity base/head</userinput>
+&prompt.user; <userinput>svn update --set-depth=immediates base/release base/releng base/stable</userinput></screen>
<para>The above command will pull down a full copy of
<literal>head</literal>, plus empty copies of every
@@ -778,15 +780,15 @@
<literal>7-STABLE</literal> is required, expand the working
copy:</para>
- <screen>&prompt.user; <userinput>svn up --set-depth=infinity base/stable/7</userinput></screen>
+ <screen>&prompt.user; <userinput>svn update --set-depth=infinity base/stable/7</userinput></screen>
<para>Subtrees do not have to be expanded completely. For
instance, expanding only <literal>stable/7/sys</literal> and
then later expand the rest of
<literal>stable/7</literal>:</para>
- <screen>&prompt.user; <userinput>svn up --set-depth=infinity base/stable/7/sys</userinput>
-&prompt.user; <userinput>svn up --set-depth=infinity base/stable/7</userinput></screen>
+ <screen>&prompt.user; <userinput>svn update --set-depth=infinity base/stable/7/sys</userinput>
+&prompt.user; <userinput>svn update --set-depth=infinity base/stable/7</userinput></screen>
<para>Updating the tree with <command>svn update</command>
will only update what was previously asked for (in this
@@ -803,7 +805,7 @@
read-only tree that can be updated, but not committed back
to the main repository. To do this, use:</para>
- <screen>&prompt.user; <userinput>svn co https://svn.FreeBSD.org/base/head /usr/src</userinput></screen>
+ <screen>&prompt.user; <userinput>svn checkout https://svn.FreeBSD.org/base/head /usr/src</userinput></screen>
<para>More details on using Subversion this way can be found
in <link xlink:href="&url.books.handbook;/svn.html">Using
@@ -863,25 +865,9 @@
<sect3 xml:id="svn-daily-use-adding-and-removing">
<title>Adding and Removing Files</title>
- <note>
- <para>Before adding files, get a copy of <link
- xlink:href="https://people.FreeBSD.org/~peter/auto-props.txt">auto-props.txt</link>
- (there is also a <link
- xlink:href="https://people.FreeBSD.org/~beat/cvs2svn/auto-props.txt">
- ports tree specific version</link>) and add it to
- <filename>~/.subversion/config</filename> according to the
- instructions in the file. If you added something before
- reading this, use <command>svn rm --keep-local</command>
- for just added files, fix your config file and re-add them
- again. The initial config file is created when you first
- run a svn command, even something as simple as
- <command>svn help</command>.</para>
- </note>
-
- <para>Files are added to a
- <acronym>SVN</acronym> repository with <command>svn
- add</command>. To add a file named
- <emphasis>foo</emphasis>, edit it, then:</para>
+ <para>Files are added to a <acronym>SVN</acronym> repository
+ with <command>svn add</command>. To add an existing file
+ named <emphasis>foo</emphasis>, run:</para>
<screen>&prompt.user; <userinput>svn add <replaceable>foo</replaceable></userinput></screen>
@@ -896,32 +882,173 @@
<literal>$&os;$</literal> string.</para>
</note>
+ <para>If a file is missing a
+ <application>Subversion</application> property, it can be
+ easily added. See <xref
+ linkend="svn-daily-use-properties"/>.</para>
+
<para>Files can be removed with <command>svn
- remove</command>:</para>
+ delete</command>:</para>
- <screen>&prompt.user; <userinput>svn remove <replaceable>foo</replaceable></userinput></screen>
+ <screen>&prompt.user; <userinput>svn delete <replaceable>foo</replaceable></userinput></screen>
- <para>Subversion does not require deleting the file before
- using <command>svn rm</command>, and indeed complains if
- that happens.</para>
+ <note>
+ <para>Subversion does not require deleting the file before
+ using <command>svn delete</command>, and indeed complains if
+ that happens.</para>
+ </note>
- <para>It is possible to add directories with
+ <para>Use <command>svn mkdir</command> to combine the creation
+ of the directory and the adding of it:</para>
+
+ <screen>&prompt.user; <userinput>svn mkdir <replaceable>bar</replaceable></userinput></screen>
+
+ <para>It is also possible to add existing directories with
<command>svn add</command>:</para>
<screen>&prompt.user; <userinput>mkdir <replaceable>bar</replaceable></userinput>
&prompt.user; <userinput>svn add <replaceable>bar</replaceable></userinput></screen>
- <para>Although <command>svn mkdir</command> makes this easier
- by combining the creation of the directory and the adding of
- it:</para>
+ <para>Like files, directories are removed with <command>svn
+ delete</command>. There is no separate command specifically
+ for removing directories.</para>
- <screen>&prompt.user; <userinput>svn mkdir <replaceable>bar</replaceable></userinput></screen>
+ <screen>&prompt.user; <userinput>svn delete <replaceable>bar</replaceable></userinput></screen>
+ </sect3>
+
+ <sect3 xml:id="svn-daily-use-properties">
+ <title>Dealing with <application>Subversion</application>
+ Properties</title>
+
+ <para>In the base and ports
+ <application>Subversion</application> repositories,
+ properties are set automatically when a file is added. This
+ is achieved by using the <literal>svn:auto-props</literal>
+ property. No auto-props file needs to be used. The base
+ system <filename>auto-props.txt</filename> should not be
+ used. The current list of automatic properties can be seen
+ with:</para>
+
+ <screen>&prompt.user; <userinput>svn propget svn:auto-props https://svn.freebsd.org/ports</userinput>
+bsd.*.mk = svn:keywords=FreeBSD=%H
+distinfo* = fbsd:nokeywords=yes
+extrapatch-* = fbsd:nokeywords=yes
+extra-patch-*= fbsd:nokeywords=yes
+patch-* = fbsd:nokeywords=yes
+pkg-* = fbsd:nokeywords=yes
+Makefile* = svn:keywords=FreeBSD=%H
+* = svn:eol-style=native; svn:mime-type=text/plain
+
+&prompt.user; <userinput>svn propget svn:auto-props https://svn.freebsd.org/base</userinput>
+*.c = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain
+*.h = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain
+*.s = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain
+*.S = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain
+*.cc = svn:eol-style=native; svn:keywords=FreeBSD=%H; svn:mime-type=text/plain
+[...]</screen>
- <para>Like files, directories are removed with
- <command>svn rm</command>. There is no separate command
- specifically for removing directories.</para>
+ <note>
+ <para>Some subdirectories may have additional
+ auto-properties, to find out which, the
+ <option>-R</option> argument for <command>svn
+ propget</command> can be used, for example:</para>
+
+ <screen>&prompt.user; <userinput>svn propget -R svn:auto-props https://svn.freebsd.org/ports/head/</userinput>
+https://svn.freebsd.org/ports/head/Mk - *.mk = svn:keywords=FreeBSD=%H
- <screen>&prompt.user; <userinput>svn rm <replaceable>bar</replaceable></userinput></screen>
+https://svn.freebsd.org/ports/head/Mk/Scripts - *.sh = svn:keywords=FreeBSD=%H
+
+https://svn.freebsd.org/ports/head/misc/freebsd-release-manifests/files/MANIFESTS - *=svn:eol-style=native; fbsd:nokeywords=on; svn:mime-type=text/plain</screen>
+ </note>
+
+ <para>The Documentation repository does not use
+ <literal>svn:auto-props</literal>, when adding files, it may
+ be necessary to add properties manually.</para>
+
+ <tip>
+ <para>When adding a file, it is easy to see what properties
+ have been automatically added to it using <command>svn
+ proplist</command>. For example, in the ports
+ tree:</para>
+
+ <screen>&prompt.user; <userinput>svn add Makefile pkg-plist</userinput>
+A Makefile
+A pkg-plist
+&prompt.user; <userinput>svn proplist Makefile pkg-plist</userinput>
+Properties on 'Makefile':
+ svn:eol-style
+ svn:keywords
+ svn:mime-type
+Properties on 'pkg-plist':
+ fbsd:nokeywords
+ svn:eol-style
+ svn:mime-type</screen>
+
+ <para>It is also possible to get the value of all the
+ properties of a file using <command>svn proplist
+ -v</command>:</para>
+
+ <screen>&prompt.user; <userinput>svn proplist -v Makefile pkg-plist</userinput>
+Properties on 'Makefile':
+ svn:eol-style
+ native
+ svn:keywords
+ FreeBSD=%H
+ svn:mime-type
+ text/plain
+Properties on 'pkg-plist':
+ fbsd:nokeywords
+ yes
+ svn:eol-style
+ native
+ svn:mime-type
+ text/plain</screen>
+ </tip>
+
+ <example xml:id="svn-daily-props-ex1">
+ <title>Adding a Missing Subversion Property</title>
+
+ <para>It may happen that some file does not have the correct
+ properties and they need to be added or removed manually.
+ For example, if the file contains a
+ <literal>$FreeBSD$</literal> keyword and the
+ server complains about it:</para>
+
+ <screen>&prompt.user; <userinput>svn commit <replaceable>foo</replaceable></userinput>
+Adding <replaceable>foo</replaceable>
+Transmitting file data .done
+Committing transaction...
+svn: E165001: Commit failed (details follow):
+svn: E165001: Commit blocked by pre-commit hook (exit code 1) with output:
+Path "head/<replaceable>foo</replaceable>" is missing the svn:keywords property (or an fbsd:nokeywords override)
+== Pre-commit problem count: 1
+
+svn: E165001: Your commit message was left in a temporary file:
+svn: E165001: '/usr/ports/svn-commit.tmp'</screen>
+
+ <para>If the file contains a
+ <literal>$FreeBSD$</literal> keyword, then
+ use <command>svn propset</command> to add the required
+ property, and commit the file again:</para>
+
+ <screen>&prompt.user; <userinput>svn propset svn:keywords FreeBSD=%H <replaceable>foo</replaceable></userinput></screen>
+
+ <para>If the file does not contain the keyword, or it
+ contains a keyword, but it should not be modified, for
+ example, if the file is a patch. The
+ <literal>fbsd:nokeywords</literal> keyword need to be
+ added:</para>
+
+ <screen>&prompt.user; <userinput>svn propset fbsd:nokeywords yes <replaceable>foo</replaceable></userinput></screen>
+
+ <para>The file can then be committed:</para>
+
+ <screen>&prompt.user; <userinput>svn commit <replaceable>foo</replaceable></userinput>
+Adding <replaceable>foo</replaceable>
+Transmitting file data .done
+Committing transaction...
+Committed revision 85645.</screen>
+ </example>
</sect3>
<sect3 xml:id="svn-daily-use-copying-and-moving">
@@ -994,46 +1121,80 @@
<para>If an <command>svn update</command> resulted in a merge
conflict, Subversion will remember which files have
conflicts and refuse to commit any changes to those files
- until explicitly told that the conflicts have been resolved.
- The simple, not yet deprecated procedure is:</para>
-
- <screen>&prompt.user; <userinput>svn resolved <replaceable>foo</replaceable></userinput></screen>
+ until explicitly told that the conflicts have been
+ resolved.</para>
- <para>However, the preferred procedure is:</para>
+ <para>The preferred procedure to mark conflicts as resolved
+ is:</para>
<screen>&prompt.user; <userinput>svn resolve --accept=working <replaceable>foo</replaceable></userinput></screen>
- <para>The two examples are equivalent. Possible values for
+ <para>Possible values for
<literal>--accept</literal> are:</para>
- <itemizedlist>
+ <variablelist>
+ <varlistentry>
+ <term><literal>working</literal></term>
+
<listitem>
- <para><literal>working</literal>: use the version in your
+ <para>Use the version in your
working directory (which one presumes has been edited to
resolve the conflicts).</para>
</listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>base</literal></term>
<listitem>
- <para><literal>base</literal>: use a pristine copy of the
+ <para>Use a pristine copy of the
version you had before <command>svn update</command>,
discarding your own changes, the conflicting changes,
and possibly other intervening changes as well.</para>
</listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>mine-conflict</literal></term>
+
+ <listitem>
+ <para>Accept my version for all conflicts. Keep non
+ conflicting changes from both sides.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>theirs-conflict</literal></term>
+
+ <listitem>
+ <para>Accept the version that was retrieved when you did
+ <command>svn update</command> for all conflicts. Keep
+ non conflicting changes from both sides.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>mine-full</literal></term>
<listitem>
- <para><literal>mine-full</literal>: use what you had
+ <para>Use what you had
before <command>svn update</command>, including your own
changes, but discarding the conflicting changes, and
possibly other intervening changes as well.</para>
</listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><literal>theirs-full</literal></term>
<listitem>
- <para><literal>theirs-full</literal>: use the version that
+ <para>Use the version that
was retrieved when you did
<command>svn update</command>, discarding your own
changes.</para>
</listitem>
- </itemizedlist>
+ </varlistentry>
+ </variablelist>
</sect3>
</sect2>
@@ -1118,7 +1279,7 @@
</listitem>
<listitem>
- <para><literal>remove</literal>, <literal>copy</literal>,
+ <para><literal>delete</literal>, <literal>copy</literal>,
<literal>rename</literal></para>
</listitem>
@@ -1140,7 +1301,8 @@
<para>This is equivalent to these commands
which take minutes and hours as opposed to seconds,
- depending on your network connection:</para>
+ depending on your network connection and local hard drive
+ speed:</para>
<screen>&prompt.user; <userinput>svn checkout --depth=immediates svn+ssh://repo.freebsd.org/base</userinput>
&prompt.user; <userinput>cd base</userinput>
@@ -1277,10 +1439,12 @@
of stable/7:</para>
<screen>&prompt.user; <userinput>cd stable/7</userinput>
-&prompt.user; <userinput>svn up --set-depth=infinity</userinput></screen>
+&prompt.user; <userinput>svn update --set-depth=infinity</userinput></screen>
+ <important>
<para>The target directory must also be up-to-date and must
not contain any uncommitted changes or stray files.</para>
+ </important>
</sect4>
<sect4>
@@ -1493,9 +1657,9 @@
<para>To flatten the <literal>pf</literal> tree:</para>
<screen>&prompt.user; <userinput>cd <replaceable>vendor/pf/dist/contrib/pf</replaceable></userinput>
-&prompt.user; <userinput>svn mv $(svn list) ../..</userinput>
+&prompt.user; <userinput>svn move $(svn list) ../..</userinput>
&prompt.user; <userinput>cd ../..</userinput>
-&prompt.user; <userinput>svn rm contrib</userinput>
+&prompt.user; <userinput>svn delete contrib</userinput>
&prompt.user; <userinput>svn propdel -R svn:mergeinfo .</userinput>
&prompt.user; <userinput>svn commit</userinput></screen>
@@ -1562,7 +1726,7 @@
<para>A <command>svn add</command> is required to add any
files that were added since the last vendor import, and
- <command>svn rm</command> is required to remove any that
+ <command>svn delete</command> is required to remove any that
were removed since. Preparing sorted lists of the
contents of the vendor tree and of the sources that are
about to be imported is recommended, to facilitate the
@@ -1587,17 +1751,17 @@
<para>Now, the sources must be copied into
<filename><replaceable>dist</replaceable></filename> and
the <command>svn add</command> and
- <command>svn rm</command> commands are used as
+ <command>svn delete</command> commands are used as
needed:</para>
<screen>&prompt.user; <userinput>cd <replaceable>vendor/pf/pf-4.3</replaceable></userinput>
&prompt.user; <userinput>tar cf - . | tar xf - -C ../dist</userinput>
&prompt.user; <userinput>cd <replaceable>../dist</replaceable></userinput>
-&prompt.user; <userinput>comm -23 ../old ../new | xargs svn rm</userinput>
+&prompt.user; <userinput>comm -23 ../old ../new | xargs svn delete</userinput>
&prompt.user; <userinput>comm -13 ../old ../new | xargs svn --parents add</userinput></screen>
<para>If any directories were removed, they will have to
- be <command>svn rm</command>ed manually. Nothing will
+ be <command>svn delete</command>d manually. Nothing will
break if they are not, but they will remain in the
tree.</para>
@@ -1624,9 +1788,9 @@
future reference. The best and quickest way to do this
is directly in the repository:</para>
- <screen>&prompt.user; <userinput>svn cp svn+ssh://repo.freebsd.org/base/<replaceable>vendor/pf/dist</replaceable> svn+ssh://repo.freebsd.org/base/<replaceable>vendor/pf/4.3</replaceable></userinput></screen>
+ <screen>&prompt.user; <userinput>svn copy svn+ssh://repo.freebsd.org/base/<replaceable>vendor/pf/dist</replaceable> svn+ssh://repo.freebsd.org/base/<replaceable>vendor/pf/4.3</replaceable></userinput></screen>
- <para>Once that is complete, <command>svn up</command> the
+ <para>Once that is complete, <command>svn update</command> the
working copy of
<filename><replaceable>vendor/pf</replaceable></filename>
to get the new tag, although this is rarely
@@ -1637,7 +1801,7 @@
removed:</para>
<screen>&prompt.user; <userinput>cd <replaceable>vendor/pf</replaceable></userinput>
-&prompt.user; <userinput>svn cp dist 4.3</userinput>
+&prompt.user; <userinput>svn copy dist 4.3</userinput>
&prompt.user; <userinput>svn propdel svn:mergeinfo -R 4.3</userinput></screen>
</sect5>
</sect4>
@@ -1646,7 +1810,7 @@
<title>Merging to Head</title>
<screen>&prompt.user; <userinput>cd <replaceable>head/contrib/pf</replaceable></userinput>
-&prompt.user; <userinput>svn up</userinput>
+&prompt.user; <userinput>svn update</userinput>
&prompt.user; <userinput>svn merge --accept=postpone svn+ssh://repo.freebsd.org/base/<replaceable>vendor/pf/dist</replaceable> .</userinput></screen>
<para>The <literal>--accept=postpone</literal> tells
@@ -1736,7 +1900,7 @@
<para>First, prepare the directory in
<filename>vendor</filename>:</para>
- <screen>&prompt.user; <userinput>svn co --depth immediates <replaceable>$FSVN/vendor</replaceable></userinput>
+ <screen>&prompt.user; <userinput>svn checkout --depth immediates <replaceable>$FSVN/vendor</replaceable></userinput>
&prompt.user; <userinput>cd <replaceable>vendor</replaceable></userinput>
&prompt.user; <userinput>svn mkdir <replaceable>byacc</replaceable></userinput>
&prompt.user; <userinput>svn mkdir <replaceable>byacc/dist</replaceable></userinput></screen>
@@ -1748,7 +1912,7 @@
the imported version. To save time and bandwidth,
direct remote committing and tagging is possible:</para>
- <screen>&prompt.user; <userinput>svn cp -m <replaceable>"Tag byacc 20120115"</replaceable> <replaceable>$FSVN/vendor/byacc/dist</replaceable> <replaceable>$FSVN/vendor/byacc/20120115</replaceable></userinput></screen>
+ <screen>&prompt.user; <userinput>svn copy -m <replaceable>"Tag byacc 20120115"</replaceable> <replaceable>$FSVN/vendor/byacc/dist</replaceable> <replaceable>$FSVN/vendor/byacc/20120115</replaceable></userinput></screen>
</sect5>
<sect5>
@@ -1757,7 +1921,7 @@
<para>Due to this being a new file, copy it for the
merge:</para>
- <screen>&prompt.user; <userinput>svn cp -m <replaceable>"Import byacc to contrib"</replaceable> <replaceable>$FSVN/vendor/byacc/dist</replaceable> <replaceable>$FSVN/head/contrib/byacc</replaceable></userinput></screen>
+ <screen>&prompt.user; <userinput>svn copy -m <replaceable>"Import byacc to contrib"</replaceable> <replaceable>$FSVN/vendor/byacc/dist</replaceable> <replaceable>$FSVN/head/contrib/byacc</replaceable></userinput></screen>
<para>Working normally on newly imported sources is still
possible.</para>
@@ -4046,7 +4210,7 @@
<procedure>
<step>
<para>Remove the port's files and directory with
- <command>svn remove</command>.</para>
+ <command>svn delete</command>.</para>
</step>
<step>
@@ -4117,7 +4281,7 @@
port:</para>
<screen>&prompt.user; <userinput>cd /usr/ports/<replaceable>category</replaceable></userinput>
-&prompt.user; <userinput>svn cp 'svn+ssh://repo.freebsd.org/ports/head/<replaceable>category</replaceable>/<replaceable>portname</replaceable>/@<replaceable>XXXXXX</replaceable>' <replaceable>portname</replaceable></userinput></screen>
+&prompt.user; <userinput>svn copy 'svn+ssh://repo.freebsd.org/ports/head/<replaceable>category</replaceable>/<replaceable>portname</replaceable>/@<replaceable>XXXXXX</replaceable>' <replaceable>portname</replaceable></userinput></screen>
<para>Pick the revision that is just before the
removal. For example, if the revision where it was
@@ -4129,7 +4293,7 @@
after the last commit to the port.</para>
<screen>&prompt.user; <userinput>cd /usr/ports/<replaceable>category</replaceable></userinput>
-&prompt.user; <userinput>svn cp 'svn+ssh://repo.freebsd.org/ports/head/<replaceable>category</replaceable>/<replaceable>portname</replaceable>/@{<replaceable>YYYY-MM-DD</replaceable>}' <replaceable>portname</replaceable></userinput></screen>
+&prompt.user; <userinput>svn copy 'svn+ssh://repo.freebsd.org/ports/head/<replaceable>category</replaceable>/<replaceable>portname</replaceable>/@{<replaceable>YYYY-MM-DD</replaceable>}' <replaceable>portname</replaceable></userinput></screen>
</step>
<step>
@@ -4143,7 +4307,7 @@
<step>
<para>If some files have been added, or were removed
during the resurrection process, use <command>svn
- add</command> or <command>svn remove</command> to
+ add</command> or <command>svn delete</command> to
make sure all the files in the port will be
committed.</para>
</step>
@@ -4228,7 +4392,7 @@
</step>
<step>
- <para>Use <command>svn up</command> to make
+ <para>Use <command>svn update</command> to make
certain the original files, directories, and
checkout information is current.</para>
</step>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Aug 18, 10:06 AM (23 h, 3 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
36889943
Default Alt Text
D10993.diff (23 KB)
Attached To
Mode
D10993: Start updating the Subversion primer.
Attached
Detach File
Event Timeline
Log In to Comment