All of lore.kernel.org
 help / color / mirror / Atom feed
From: Charles Bailey <charles@hashpling.org>
To: git@vger.kernel.org
Cc: Junio C Hamano <gitster@pobox.com>, Jakub Narebski <jnareb@gmail.com>
Subject: [PATCH] gitweb: add a setting to control the tabstop width
Date: Mon, 3 Mar 2008 22:11:59 +0000	[thread overview]
Message-ID: <20080303221159.GA6875@hashpling.org> (raw)

Not everyone uses the same tab width. gitweb learns a new setting to
control the tabstop width. The configuration can be set globally and
on a per project basis. The default is 8, preserving existing
behaviour. The configuration variable name is borrowed from the vim
setting with the same behaviour.

Signed-off-by: Charles Bailey <charles@hashpling.org>
---

The untabify function seems the sensible place to make the change. As
untabify is called once per line from various different locations it
also makes sense to cache the result of the config lookup in a package
variable, though this makes the change slightly less neat.

This change should have a minimal impact on performance but it would
appreciate some more eyes and ideally some performance testing on
heavier systems than my own. 

 gitweb/gitweb.perl |   29 ++++++++++++++++++++++++++++-
 1 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/gitweb/gitweb.perl b/gitweb/gitweb.perl
index 922dee9..cdabe37 100755
--- a/gitweb/gitweb.perl
+++ b/gitweb/gitweb.perl
@@ -108,6 +108,12 @@ our $mimetypes_file = undef;
 # could be even 'utf-8' for the old behavior)
 our $fallback_encoding = 'latin1';
 
+# variable to keep track of the the current tabstop width
+# this is a package variable as the natural place to check the feature is in
+# the untabify function, but as the function is called once per line we don't
+# want to have to recheck the config for each line
+our $tabstop_width;
+
 # rename detection options for git-diff and git-diff-tree
 # - default is '-M', with the cost proportional to
 #   (number of removed files) * (number of new files).
@@ -275,6 +281,18 @@ our %feature = (
 	'forks' => {
 		'override' => 0,
 		'default' => [0]},
+
+	# Tabstop width.  Controls the number of spaces to which tabs are
+	# expanded. Default is 8.
+	# To change system wide add the following to $GITWEB_CONFIG
+	# $feature{'tabstop'}{'default'} = [8];
+	# To have project specific config enable override in $GITWEB_CONFIG
+	# $feature{'tabstop'}{'override'} = 1;
+	# and in project config gitweb.tabstop = <width>
+	'tabstop' => {
+		'sub' => \&feature_tabstop,
+		'override' => 0,
+		'default' => [8]},
 );
 
 sub gitweb_check_feature {
@@ -340,6 +358,11 @@ sub feature_pickaxe {
 	return ($_[0]);
 }
 
+sub feature_tabstop {
+	my ($val) = git_get_project_config('tabstop', '--int');
+	return defined($val) ? ($val) : ($_[0])
+}
+
 # checking HEAD file with -e is fragile if the repository was
 # initialized long time ago (i.e. symlink HEAD) and was pack-ref'ed
 # and then pruned.
@@ -832,8 +855,12 @@ sub unquote {
 sub untabify {
 	my $line = shift;
 
+	if (!defined($tabstop_width)) {
+		($tabstop_width) = gitweb_check_feature('tabstop');
+	}
+
 	while ((my $pos = index($line, "\t")) != -1) {
-		if (my $count = (8 - ($pos % 8))) {
+		if (my $count = ($tabstop_width - ($pos % $tabstop_width))) {
 			my $spaces = ' ' x $count;
 			$line =~ s/\t/$spaces/;
 		}
-- 
1.5.4.3.432.g5ecfc


-- 
Charles Bailey
http://ccgi.hashpling.plus.com/blog/

             reply	other threads:[~2008-03-03 22:12 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-03-03 22:11 Charles Bailey [this message]
2008-03-03 22:33 ` [PATCH] gitweb: add a setting to control the tabstop width Jakub Narebski
2008-03-03 22:52   ` Charles Bailey
2008-03-04  0:08     ` Jakub Narebski
2008-03-03 22:52   ` Jakub Narebski
2008-03-03 23:13 ` Junio C Hamano
2008-03-04  3:35   ` Martin Langhoff
2008-03-04  8:19     ` Jakub Narebski
2008-03-04  8:41       ` Charles Bailey
2008-03-04  8:36   ` Charles Bailey

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080303221159.GA6875@hashpling.org \
    --to=charles@hashpling.org \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jnareb@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.