Error processing request

Parameters

CONTENT_LENGTH0
REQUEST_METHODGET
REQUEST_URI/revision/Getting+Started+With+Working+On+The+Tcl%2FTk+Core?V=17
QUERY_STRINGV=17
CONTENT_TYPE
DOCUMENT_URI/revision/Getting+Started+With+Working+On+The+Tcl/Tk+Core
DOCUMENT_ROOT/var/www/nikit/nikit/nginx/../docroot
SCGI1
SERVER_PROTOCOLHTTP/1.1
HTTPSon
REMOTE_ADDR172.70.174.87
REMOTE_PORT28476
SERVER_PORT4443
SERVER_NAMEwiki.tcl-lang.org
HTTP_HOSTwiki.tcl-lang.org
HTTP_CONNECTIONKeep-Alive
HTTP_ACCEPT_ENCODINGgzip
HTTP_CF_IPCOUNTRYUS
HTTP_X_FORWARDED_FOR3.81.172.77
HTTP_CF_RAY6d1873d2c82f828d-IAD
HTTP_X_FORWARDED_PROTOhttps
HTTP_CF_VISITOR{"scheme":"https"}
HTTP_USER_AGENTCCBot/2.0 (https://commoncrawl.org/faq/)
HTTP_ACCEPTtext/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_LANGUAGEen-US,en;q=0.5
HTTP_CF_CONNECTING_IP3.81.172.77
HTTP_CDN_LOOPcloudflare

Body


Error

Unknow state transition: LINE -> END

-code

1

-level

0

-errorstack

INNER {returnImm {Unknow state transition: LINE -> END} {}} CALL {my render_wikit {Getting Started With Working On The Tcl/Tk Core} {'''TODO:''' Guidelines for use of branches (vs direct commit to trunk, etc.).

<<TOC>>
----
The Tcl and Tk source repositories can be found at

   * http://core.tcl.tk/tcl
   * http://core.tcl.tk/tk

The version control system used for these is [Fossil].

The remainder of this page follows Fossil's generic [http://www.fossil-scm.org/index.html/doc/trunk/www/quickstart.wiki%|%Quickstart Guide], modified to suit Tcl/Tk development.

**Installation**

Prebuilt binaries for the major platforms (Linux, OSX, Windows, BSD) are available at http://www.fossil-scm.org/download.html
[http://www.fossil-scm.org/index.html/doc/trunk/www/build.wiki%|%Building it yourself] is of course possible as well.

**Getting Tcl and Tk Sources**

Fossil works with repository files (a database with the project's complete history) and with checked-out local trees (the working directory you use to do your work). The workflow for Tcl and Tk looks like this:

First, clone the repository

======sh
fossil clone http://mirror1.tcl.tk/tcl tcl.fossil
fossil pull  http://core.tcl.tk/tcl -R tcl.fossil

fossil clone http://mirror1.tcl.tk/tk  tk.fossil
fossil pull  http://core.tcl.tk/tk  -R tk.fossil
======

We are using mirror1 because the repositories are large and http://core.tcl.tk/ is bandwidth-limited. To prevent fossil from remembering the wrong url for pushing we then follow this by pulls from the proper repository. This will also import all changes which were pushed while we were cloning around.


**Make Ready For Work**

Then create local checkouts to work with (using Tcl as example):

======sh
mkdir /somewhere/tcl
cd    /somewhere/tcl
fossil open /wherever/you/have/tcl.fossil
======

Now you have the most recent revision of Tcl's trunk (ex-CVS HEAD) in the directory. Hacking can commence.

**Keeping Up-To-Date**

Move into a checkout, then pull all changes, at last update the checkout.

======sh
cd    /somewhere/tcl
fossil pull
fossil update
======

The first time "fossil pull" is used you have to specify the repository (url) you are pulling from (as shown the first section of the page). From that point on fossil remembers the url and a simple "fossil pull" is sufficient.


**Working In Branches**

To fix issues in a specific branch, for example "core-8-5-branch", we have to create a local checkout which contains the sources of said branch. We can do this in two ways:

'''For one''', create a new checkout and tell fossil which branch to put into it:
======sh
mkdir /somewhere/tcl-core-8-5-branch
cd    /somewhere/tcl-core-8-5-branch
fossil open /wherever/you/have/tcl.fossil core-8-5-branch
======

'''For two''', reuse an existing checkout and switch it over to the desired branch
======sh
cd    /somewhere/tcl
fossil update core-8-5-branch
======

The set of open branches can be discovered by invoking
======sh
fossil branch list
======
from within a checkout, or via
======sh
fossil branch list -R /wherever/you/have/tcl.fossil
======
if no checkout is available.

***Porting Forward***

When fixing an issue start doing that at the oldest branch you wish to support.
When the fix is done sequentially merge it up to the newer branches, following a stair-case pattern.

For example, start the fix in "core-8-4-branch", after committing merge 8.4 to "core-8-5-branch", and lastly, merge 8.5 to trunk. Do not follow a star-pattern where the fix is directly merged from 8.4 to trunk. This messes up the ancestor-selection logic of future merges.

======sh
# In core-8-4-branch
... develop the fix
fossil commit ...

# Step I, merge up to 8.5
fossil update core-8-5-branch
fossil merge core-8-4-branch
... fix conflicts, if any
fossil commit ...

# Step II, merge up to 8.6 aka trunk
fossil update trunk
fossil merge core-8-5-branch
... fix conflicts, if any
fossil commit ...
======

***Porting Backward***

When fixing a bug it is not always clear in the beginning what the oldest branch is, to support. This leaves us later with the necessity of porting a change backward, making the staircase pattern impossible. In that case cherry-pick the change to apply in the older branch. Assuming our fix is VERSION, and has to go into 8.4:

======sh
fossil update core-8-4-branch
fossil merge --cherrypick VERSION
... fix conflicts, if any
fossil commit
======

**Pushing Changes**

To push changes directly to http://core.tcl.tk/tcl or http://core.tcl.tk/tk an account is needed on that repository. The administrators which can handle requests for accounts are Don Porter,, Donal Fellows, Richard Hipp, Jeff Hobbs, Joe English, Roy Keene, Kevin Kenny, and Andreas Kupries. This is primarily for Tcl and Tk Maintainers.

Assuming that you have an account A invoke
======sh
fossil push http://[email protected]/tcl
======
from within a local checkout. Fossil will ask for the password of A and then push all changes (if not [http://www.fossil-scm.org/index.html/doc/trunk/www/private.wiki%|%private]).

'''Note''' that the url has to be supplied only once, for the first push or sync. Fossil remembers url and hashed password, enabling future pushes to be run by invoking the simpler
======sh
fossil push
======
from the checkout.



**More Information**

For those which have worked on the core before, using CVS, please also see the [Fossil vs CVS Commands].


**Bug Tracking**

While the source repositories have changed location and tool, the bug trackers have not changed at all.
They are still at SourceForge.
See

   * [https://sourceforge.net/tracker/?group_id=10894%|%Tcl Tracker]
   * [https://sourceforge.net/tracker/?group_id=12997%|%Tk Tracker]

<<categories>>Community} regexp2} CALL {my render {Getting Started With Working On The Tcl/Tk Core} {'''TODO:''' Guidelines for use of branches (vs direct commit to trunk, etc.).

<<TOC>>
----
The Tcl and Tk source repositories can be found at

   * http://core.tcl.tk/tcl
   * http://core.tcl.tk/tk

The version control system used for these is [Fossil].

The remainder of this page follows Fossil's generic [http://www.fossil-scm.org/index.html/doc/trunk/www/quickstart.wiki%|%Quickstart Guide], modified to suit Tcl/Tk development.

**Installation**

Prebuilt binaries for the major platforms (Linux, OSX, Windows, BSD) are available at http://www.fossil-scm.org/download.html
[http://www.fossil-scm.org/index.html/doc/trunk/www/build.wiki%|%Building it yourself] is of course possible as well.

**Getting Tcl and Tk Sources**

Fossil works with repository files (a database with the project's complete history) and with checked-out local trees (the working directory you use to do your work). The workflow for Tcl and Tk looks like this:

First, clone the repository

======sh
fossil clone http://mirror1.tcl.tk/tcl tcl.fossil
fossil pull  http://core.tcl.tk/tcl -R tcl.fossil

fossil clone http://mirror1.tcl.tk/tk  tk.fossil
fossil pull  http://core.tcl.tk/tk  -R tk.fossil
======

We are using mirror1 because the repositories are large and http://core.tcl.tk/ is bandwidth-limited. To prevent fossil from remembering the wrong url for pushing we then follow this by pulls from the proper repository. This will also import all changes which were pushed while we were cloning around.


**Make Ready For Work**

Then create local checkouts to work with (using Tcl as example):

======sh
mkdir /somewhere/tcl
cd    /somewhere/tcl
fossil open /wherever/you/have/tcl.fossil
======

Now you have the most recent revision of Tcl's trunk (ex-CVS HEAD) in the directory. Hacking can commence.

**Keeping Up-To-Date**

Move into a checkout, then pull all changes, at last update the checkout.

======sh
cd    /somewhere/tcl
fossil pull
fossil update
======

The first time "fossil pull" is used you have to specify the repository (url) you are pulling from (as shown the first section of the page). From that point on fossil remembers the url and a simple "fossil pull" is sufficient.


**Working In Branches**

To fix issues in a specific branch, for example "core-8-5-branch", we have to create a local checkout which contains the sources of said branch. We can do this in two ways:

'''For one''', create a new checkout and tell fossil which branch to put into it:
======sh
mkdir /somewhere/tcl-core-8-5-branch
cd    /somewhere/tcl-core-8-5-branch
fossil open /wherever/you/have/tcl.fossil core-8-5-branch
======

'''For two''', reuse an existing checkout and switch it over to the desired branch
======sh
cd    /somewhere/tcl
fossil update core-8-5-branch
======

The set of open branches can be discovered by invoking
======sh
fossil branch list
======
from within a checkout, or via
======sh
fossil branch list -R /wherever/you/have/tcl.fossil
======
if no checkout is available.

***Porting Forward***

When fixing an issue start doing that at the oldest branch you wish to support.
When the fix is done sequentially merge it up to the newer branches, following a stair-case pattern.

For example, start the fix in "core-8-4-branch", after committing merge 8.4 to "core-8-5-branch", and lastly, merge 8.5 to trunk. Do not follow a star-pattern where the fix is directly merged from 8.4 to trunk. This messes up the ancestor-selection logic of future merges.

======sh
# In core-8-4-branch
... develop the fix
fossil commit ...

# Step I, merge up to 8.5
fossil update core-8-5-branch
fossil merge core-8-4-branch
... fix conflicts, if any
fossil commit ...

# Step II, merge up to 8.6 aka trunk
fossil update trunk
fossil merge core-8-5-branch
... fix conflicts, if any
fossil commit ...
======

***Porting Backward***

When fixing a bug it is not always clear in the beginning what the oldest branch is, to support. This leaves us later with the necessity of porting a change backward, making the staircase pattern impossible. In that case cherry-pick the change to apply in the older branch. Assuming our fix is VERSION, and has to go into 8.4:

======sh
fossil update core-8-4-branch
fossil merge --cherrypick VERSION
... fix conflicts, if any
fossil commit
======

**Pushing Changes**

To push changes directly to http://core.tcl.tk/tcl or http://core.tcl.tk/tk an account is needed on that repository. The administrators which can handle requests for accounts are Don Porter,, Donal Fellows, Richard Hipp, Jeff Hobbs, Joe English, Roy Keene, Kevin Kenny, and Andreas Kupries. This is primarily for Tcl and Tk Maintainers.

Assuming that you have an account A invoke
======sh
fossil push http://[email protected]/tcl
======
from within a local checkout. Fossil will ask for the password of A and then push all changes (if not [http://www.fossil-scm.org/index.html/doc/trunk/www/private.wiki%|%private]).

'''Note''' that the url has to be supplied only once, for the first push or sync. Fossil remembers url and hashed password, enabling future pushes to be run by invoking the simpler
======sh
fossil push
======
from the checkout.



**More Information**

For those which have worked on the core before, using CVS, please also see the [Fossil vs CVS Commands].


**Bug Tracking**

While the source repositories have changed location and tool, the bug trackers have not changed at all.
They are still at SourceForge.
See

   * [https://sourceforge.net/tracker/?group_id=10894%|%Tcl Tracker]
   * [https://sourceforge.net/tracker/?group_id=12997%|%Tk Tracker]

<<categories>>Community}} CALL {my revision {Getting Started With Working On The Tcl/Tk Core}} CALL {::oo::Obj56389183 process revision/Getting+Started+With+Working+On+The+Tcl%2FTk+Core} CALL {::oo::Obj56389181 process}

-errorcode

NONE

-errorinfo

Unknow state transition: LINE -> END
    while executing
"error $msg"
    (class "::Wiki" method "render_wikit" line 6)
    invoked from within
"my render_$default_markup $N $C $mkup_rendering_engine"
    (class "::Wiki" method "render" line 8)
    invoked from within
"my render $name $C"
    (class "::Wiki" method "revision" line 31)
    invoked from within
"my revision $page"
    (class "::Wiki" method "process" line 51)
    invoked from within
"$server process [string trim $uri /]"

-errorline

4