Differences between revisions 1 and 24 (spanning 23 versions)
Revision 1 as of 2013-03-18 17:12:47
Size: 292
Editor: beast
Comment: init
Revision 24 as of 2013-04-15 21:06:11
Size: 5412
Editor: mpm
Comment:
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
Here are some ideas of possible 2013 summer project ideas for Mercurial. Your own ideas are welcome. You may decide to work on these ideas or use them as a starting point for your own. Either way, come talk to us in #mercurial in Freenode or on the mercurial-devel@selenic.com mailing list. #pragma section-numbers 2

= GSoC Project Ideas for 2013 =

/!\ All GSoC candidates should visit our [[SummerOfCode/2013]] page

Here are some ideas of possible 2013 summer project ideas for Mercurial. Your own ideas are welcome. You may decide to work on these ideas or use them as a starting point for your own.

<<TableOfContents>>

== Advanced revset optimization ==

Topic:Revsets are a powerful built-in query language for looking at changesets. We even have an optimizing engine to reorder queries for performance. But there are several areas where things could be improved:

 * incremental, generator-style evaluation
 * cache/avoid repeated evaluation of common subexpressions
 * efficient handling of very large contiguous ranges

== Unicode filename support on Windows ==

While Mercurial users on Linux and Mac can happily exchange repositories with filenames in Unicode and even legacy encodings, Windows presents some extra challenges for using non-ASCII filenames portably. We'd like to address this by introducing an automatic UTF-8 translation layer on Windows systems.

See [[WindowsUTF8Plan]]

== Generic templating support ==

Mercurial has a powerful templating engine, but on the command line it's only available for log-like commands.
We'd like to extend its power and flexibility to the rest of Mercurial's command-line interface, in addition to adding built-in support for standard formats like XML, JSON, etc.

See [[GenericTemplatingPlan]]

== Improved built-in help ==

Mercurial's built-in help is quite good, but could be better. Here are some things that could be done:

 * improve crosslinking between help topics
 * migrate remaining contents from manpages into built-in help
 * add example usage to verbose sections in help
 * improve the glossary

== Advanced Hgweb support ==

Our web interface is very handy, but there are a number of features that could be improved:

 * Add functions and conditionals to the templating language
 * Add basic AJAX functionality to make history browsing more dynamic
 * Add some basic web admin functionality

== Performance tuning ==

Mercurial is fast but could always be faster. Possible areas include:

 * Optimizing startup performance
 * Optimizing performance on Windows

== C implementation of command server API ==

See CommandServer.

== Improvement of record API and User Interface ==

Being able to select parts of the existing changes, with hunk or greater granularity, in an interactive way, can improve the use of commands and extensions that take changes, such as commit, amend and import.

The RecordExtension currently allows patch hunk selection, but it has some severe knows bugs and a notably hacky implementation.

The goal of this summer of code is to rework the internal record API to stop changing on disk file and create new commit directly into memory. Improving the user interface of record is also a goal like integrating the curses CrecordExtension interface.

=== Other user interface improvements ===

Improving the progress bar algorithm and display would be nice.

== Improvement of the testing tool and testing annotation ==

Mercurial have very powerful testing tools. However as the amount of test grows bigger and bigger managing all those tests becomes hairy.

Every test-file usually holds multiple sections that each test a small set of features. If we had an official way to document and annotate those section the test-suite would be more easy to maintains. This project includes the following tasks:

 * Definition of an annotation format,
 * Improvement of the failure report,
 * Declaration and use of dependency between section,
 * Test timing report.
 * Generation of nice html page from the test and to be linked from relevant help page.

== obsolescence support in graphlog and hgweb ==

Recent version of Mercurial support the ChangesetEvolution feature. But neither log (including --graph) not hgweb show relation between processors and successors changesets.
The goal of this project is to add support to display information related to ChangesetEvolution those commands:

 * Add successors and precursors data in hg log (when applicable)
 * Add obsolescence edge in hg log --graph
 * Add obsolescence edge in hgweb
 * Add a way for hgweb to show obsoleted changeset.

== integrate in TortoiseHg tools to compare branches from different repos ==

Currently TortoiseHg can inspect only branches that belong to the same repository.
For instance, it is not easy to tell at which changeset two branches have diverged, if those two are stored in two separate repos.
Nonetheless it is not uncommon for a group of developers to wander in what relation are their repositories/branches between each other.
The version control system Bazaar have this feature, and it is very appealing: multiple branches are shown together in a single directed acyclic graph, possibly with multiple heads, no matter where the repository come from.
This blog post gives an illustration of what a similar feature can look like: http://www.gghh.name/dibtp/?p=361

This project aims to provide TortoiseHg with the aforementioned capability. This patch provides already a possible starting point: http://patchwork.serpentine.com/patch/940/

== Other ideas? ==

Come talk to us on [[IRC]].

----
CategoryGsoc

GSoC Project Ideas for 2013

/!\ All GSoC candidates should visit our SummerOfCode/2013 page

Here are some ideas of possible 2013 summer project ideas for Mercurial. Your own ideas are welcome. You may decide to work on these ideas or use them as a starting point for your own.

1. Advanced revset optimization

Revsets are a powerful built-in query language for looking at changesets. We even have an optimizing engine to reorder queries for performance. But there are several areas where things could be improved:

  • incremental, generator-style evaluation
  • cache/avoid repeated evaluation of common subexpressions
  • efficient handling of very large contiguous ranges

2. Unicode filename support on Windows

While Mercurial users on Linux and Mac can happily exchange repositories with filenames in Unicode and even legacy encodings, Windows presents some extra challenges for using non-ASCII filenames portably. We'd like to address this by introducing an automatic UTF-8 translation layer on Windows systems.

See WindowsUTF8Plan

3. Generic templating support

Mercurial has a powerful templating engine, but on the command line it's only available for log-like commands. We'd like to extend its power and flexibility to the rest of Mercurial's command-line interface, in addition to adding built-in support for standard formats like XML, JSON, etc.

See GenericTemplatingPlan

4. Improved built-in help

Mercurial's built-in help is quite good, but could be better. Here are some things that could be done:

  • improve crosslinking between help topics
  • migrate remaining contents from manpages into built-in help
  • add example usage to verbose sections in help
  • improve the glossary

5. Advanced Hgweb support

Our web interface is very handy, but there are a number of features that could be improved:

  • Add functions and conditionals to the templating language
  • Add basic AJAX functionality to make history browsing more dynamic
  • Add some basic web admin functionality

6. Performance tuning

Mercurial is fast but could always be faster. Possible areas include:

  • Optimizing startup performance
  • Optimizing performance on Windows

7. C implementation of command server API

See CommandServer.

8. Improvement of record API and User Interface

Being able to select parts of the existing changes, with hunk or greater granularity, in an interactive way, can improve the use of commands and extensions that take changes, such as commit, amend and import.

The RecordExtension currently allows patch hunk selection, but it has some severe knows bugs and a notably hacky implementation.

The goal of this summer of code is to rework the internal record API to stop changing on disk file and create new commit directly into memory. Improving the user interface of record is also a goal like integrating the curses CrecordExtension interface.

8.1. Other user interface improvements

Improving the progress bar algorithm and display would be nice.

9. Improvement of the testing tool and testing annotation

Mercurial have very powerful testing tools. However as the amount of test grows bigger and bigger managing all those tests becomes hairy.

Every test-file usually holds multiple sections that each test a small set of features. If we had an official way to document and annotate those section the test-suite would be more easy to maintains. This project includes the following tasks:

  • Definition of an annotation format,
  • Improvement of the failure report,
  • Declaration and use of dependency between section,
  • Test timing report.
  • Generation of nice html page from the test and to be linked from relevant help page.

10. obsolescence support in graphlog and hgweb

Recent version of Mercurial support the ChangesetEvolution feature. But neither log (including --graph) not hgweb show relation between processors and successors changesets. The goal of this project is to add support to display information related to ChangesetEvolution those commands:

  • Add successors and precursors data in hg log (when applicable)
  • Add obsolescence edge in hg log --graph
  • Add obsolescence edge in hgweb
  • Add a way for hgweb to show obsoleted changeset.

11. integrate in TortoiseHg tools to compare branches from different repos

Currently TortoiseHg can inspect only branches that belong to the same repository. For instance, it is not easy to tell at which changeset two branches have diverged, if those two are stored in two separate repos. Nonetheless it is not uncommon for a group of developers to wander in what relation are their repositories/branches between each other. The version control system Bazaar have this feature, and it is very appealing: multiple branches are shown together in a single directed acyclic graph, possibly with multiple heads, no matter where the repository come from. This blog post gives an illustration of what a similar feature can look like: http://www.gghh.name/dibtp/?p=361

This project aims to provide TortoiseHg with the aforementioned capability. This patch provides already a possible starting point: http://patchwork.serpentine.com/patch/940/

12. Other ideas?

Come talk to us on IRC.


CategoryGsoc

SummerOfCode/Ideas2013 (last edited 2013-04-15 22:31:05 by Pierre-YvesDavid)