mirror of
https://github.com/vitalif/viewvc-4intranet
synced 2019-04-16 04:14:59 +03:00
Compare commits
2 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d42c02c898 | ||
![]() |
475828a582 |
42
INSTALL
42
INSTALL
@@ -1,8 +1,8 @@
|
||||
INSTALLING VIEWCVS
|
||||
------------------
|
||||
|
||||
1) To get viewcvs.cgi to work, make sure that you have Python 1.5
|
||||
installed and a webserver which is capable of executing cgi-scripts
|
||||
1) To get viewcvs.cgi to work, make sure that you have Python 1.5.2
|
||||
installed and a webserver which is capable to execute cgi-scripts
|
||||
(either based on the .cgi extension, or by placing the script
|
||||
within a specific directory).
|
||||
|
||||
@@ -13,29 +13,21 @@ INSTALLING VIEWCVS
|
||||
access to the repository (or a copy of it). Therefore, rsh/ssh or
|
||||
pserver access doesn't work yet.
|
||||
|
||||
2) Copy viewcvs.cgi to the cgi-script location of your web server.
|
||||
|
||||
If Python is not located in /usr/local/bin, then you'll need to
|
||||
edit the first line of viewcvs.cgi.
|
||||
|
||||
3) Copy viewcvs.conf.dist to the same directory and RENAME it to
|
||||
viewcvs.conf
|
||||
|
||||
4) Edit viewcvs.conf for your specific configuration. In particular,
|
||||
examine the following configuration options:
|
||||
2) Copy viewcvs.cgi to the cgi-script location of your web
|
||||
server. Edit the file for your specific configuration. In
|
||||
particular, examine the following configuration variables:
|
||||
|
||||
cvs_roots
|
||||
default_root
|
||||
rcs_path
|
||||
mime_types_file
|
||||
|
||||
There are some other options that are usually nice to change. See
|
||||
viewcvs.conf for more information.
|
||||
If Python is not located in /usr/local/bin, then you'll need to
|
||||
edit the first line of the file.
|
||||
|
||||
5) That's it. Try it out.
|
||||
ViewCVS has not been tested on the Win32 platform.
|
||||
|
||||
Warning: ViewCVS has not been tested on web servers operating on the
|
||||
Win32 platform.
|
||||
3) That's it. Try it out.
|
||||
|
||||
|
||||
|
||||
@@ -70,19 +62,3 @@ If you've trouble to make viewcvs.cgi work:
|
||||
or 'httpd' ..
|
||||
|
||||
o does viewcvs find your RCS utililties? (edit rcs_path)
|
||||
|
||||
=== If something else happens or you can't get it to work:
|
||||
|
||||
o check the ViewCVS home page:
|
||||
|
||||
http://www.lyra.org/greg/python/viewcvs/
|
||||
|
||||
o review the ViewCVS mailing list archive to see if somebody else had
|
||||
the same problem, and it was solved:
|
||||
|
||||
http://mailman.lyra.org/pipermail/viewcvs/
|
||||
|
||||
o send mail to the ViewCVS mailing list: viewcvs@lyra.org
|
||||
|
||||
NOTE: make sure you provide an accurate description of the problem
|
||||
and any relevant tracebacks or error logs.
|
||||
|
27
TODO
27
TODO
@@ -1,27 +0,0 @@
|
||||
TODO ITEMS
|
||||
----------
|
||||
*) add Tamminen Eero's comments on how to make Linux directly execute
|
||||
the Python script. From email on Feb 19.
|
||||
[ add other examples, such as my /bin/sh hack or the teeny CGI stub
|
||||
importing the bulk hack ]
|
||||
|
||||
*) insert rcs_path into PATH before calling "rcsdiff". rcsdiff might
|
||||
use "co" and needs to find it on the path.
|
||||
|
||||
*) show the "locked" flag (attach it to the LogEntry objects).
|
||||
Idea from Russell Gordon <russell@hoopscotch.dhs.org>
|
||||
|
||||
*) committing with a specific revision number:
|
||||
http://mailman.lyra.org/pipermail/viewcvs/2000q1/000008.html
|
||||
|
||||
|
||||
KNOWN BUGS
|
||||
----------
|
||||
*) from Harri Pasanen, Feb 7: when hideattic is set, files added in a
|
||||
branch are not visible.
|
||||
|
||||
*) from Dieter Deyke, Jan 12: if the CVS revisions differ by just a
|
||||
keyword, then the diff output chokes.
|
||||
|
||||
*) no scroll bar in Netscape browser when you click "as text" on an
|
||||
HTML document.
|
1008
cgi/viewcvs.cgi
1008
cgi/viewcvs.cgi
File diff suppressed because it is too large
Load Diff
@@ -1,371 +0,0 @@
|
||||
#---------------------------------------------------------------------------
|
||||
#
|
||||
# Configuration file for ViewCVS
|
||||
#
|
||||
# Information on ViewCVS is located at the following web site:
|
||||
# http://www.lyra.org/greg/python/viewcvs/
|
||||
#
|
||||
#---------------------------------------------------------------------------
|
||||
|
||||
#
|
||||
# BASIC CONFIGURATION
|
||||
#
|
||||
# For correct operation, you will probably need to change the following
|
||||
# configuration variables:
|
||||
#
|
||||
# cvs_roots
|
||||
# default_root
|
||||
# rcs_path
|
||||
# mime_types_file
|
||||
#
|
||||
# It is usually desirable to change the following variables:
|
||||
#
|
||||
# address
|
||||
# main_title
|
||||
# logo
|
||||
# forbidden
|
||||
#
|
||||
# long_intro
|
||||
# repository_info
|
||||
#
|
||||
# For Python source colorization:
|
||||
#
|
||||
# py2html_path
|
||||
#
|
||||
# If your icons are in a special location:
|
||||
#
|
||||
# icons
|
||||
#
|
||||
|
||||
#
|
||||
# FORMAT INFORMATION
|
||||
#
|
||||
# This file is delineated by sections, specified in [brackets]. Within each
|
||||
# section, are a number of configuration settings. These settings take the
|
||||
# form of: name = value. Values may be continued on the following line by
|
||||
# indenting the continued line.
|
||||
#
|
||||
# WARNING: indentation *always* means continuation. name=value lines should
|
||||
# always start in column zero.
|
||||
#
|
||||
# Comments should always start in column zero, and are identified with "#".
|
||||
#
|
||||
# Certain configuration settings may have multiple values. These should be
|
||||
# separated by a comma. The settings where this is allowed are noted below.
|
||||
#
|
||||
# Any other setting that requires special syntax is noted at that setting.
|
||||
#
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
[general]
|
||||
|
||||
#
|
||||
# This setting specifies each of the CVS roots on your system and assigns
|
||||
# names to them. Each root should be given by a "name: path" value. Multiple
|
||||
# roots should be separated by commas.
|
||||
#
|
||||
cvs_roots =
|
||||
Development : /home/cvsroot
|
||||
|
||||
# this is the name of the default CVS root.
|
||||
default_root = Development
|
||||
|
||||
# uncomment if the RCS binaries are not on the standard path
|
||||
# NOTE: the trailing slash is required!
|
||||
#rcs_path = /usr/bin/
|
||||
|
||||
#
|
||||
# This is a pathname to a MIME types file to help viewcvs to guess the
|
||||
# correct MIME type on checkout.
|
||||
#
|
||||
# If you are having problems with the default guess on the MIME type, then
|
||||
# uncomment this option and point it at a MIME type file.
|
||||
#
|
||||
# For example, you can use the mime.types from apache here:
|
||||
#mime_types_file = /usr/local/apache/conf/mime.types
|
||||
|
||||
# This address is shown in the footer. It should contain the CVS maintainer.
|
||||
address = <a href="mailto:gstein@lyra.org">gstein@lyra.org</a>
|
||||
|
||||
# this title is used on the main entry page
|
||||
main_title = CVS Repository
|
||||
|
||||
#
|
||||
# This should contain a list of modules in the repository that should not be
|
||||
# displayed (by default or by explicit path specification).
|
||||
#
|
||||
forbidden =
|
||||
# forbidden = example
|
||||
# forbidden = example1, example2
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
[images]
|
||||
#
|
||||
# All images are defined with three values: URL, WIDTH, HEIGHT
|
||||
#
|
||||
|
||||
# this logo will appear on the page
|
||||
logo = /icons/apache_pb.gif, 259, 32
|
||||
|
||||
#
|
||||
# these icons represent a back-pointer, a directory (folder), and a file.
|
||||
# they are normally available in a standard Apache distribution, along
|
||||
# with larger versions if these are too small for you.
|
||||
#
|
||||
back_icon = /icons/small/back.gif, 16, 16
|
||||
dir_icon = /icons/small/dir.gif, 16, 16
|
||||
file_icon = /icons/small/text.gif, 16, 16
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
[colors]
|
||||
|
||||
# background color of log entry in markup
|
||||
markup_log = #ffffff
|
||||
|
||||
# color of change-section headings in a diff
|
||||
diff_heading = #99cccc
|
||||
|
||||
# color of "empty" lines
|
||||
diff_empty = #cccccc
|
||||
|
||||
# removed lines
|
||||
diff_remove = #ff9999
|
||||
|
||||
# changed lines
|
||||
diff_change = #99ff99
|
||||
|
||||
# added lines
|
||||
diff_add = #ccccff
|
||||
|
||||
# empty lines in a change block (one part smaller than the other)
|
||||
diff_dark_change = #99cc99
|
||||
|
||||
# even/odd row colors
|
||||
even_odd = #ccccee, #ffffff
|
||||
|
||||
# navigation header (in diff screen, file view, annotation, etc)
|
||||
nav_header = #9999ee
|
||||
|
||||
# color of text on most pages
|
||||
text = #000000
|
||||
|
||||
# color of standard background
|
||||
background = #ffffff
|
||||
|
||||
# color of alternate background (diffs, file view, annotations, etc)
|
||||
alt_background = #eeeeee
|
||||
|
||||
# table header colors (normal and the sorted-by column)
|
||||
column_header_normal = #cccccc
|
||||
column_header_sorted = #88ff88
|
||||
|
||||
# Uncomment the following line for colored borders in tables
|
||||
#table_border = #999999
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
[text]
|
||||
|
||||
#
|
||||
# WARNING: if you continue the text onto multiple lines, then make SURE that
|
||||
# you indent the continuations.
|
||||
#
|
||||
|
||||
short_intro =
|
||||
<p>
|
||||
Click on a directory to enter that directory. Click on a file to display
|
||||
its revision history and to get a chance to display diffs between
|
||||
revisions.
|
||||
</p>
|
||||
|
||||
long_intro =
|
||||
<p>
|
||||
This is a WWW interface for CVS Repositories.
|
||||
You can browse the file hierarchy by picking directories
|
||||
(which have slashes after them, <i>e.g.</i>, <b>src/</b>).
|
||||
If you pick a file, you will see the revision history
|
||||
for that file.
|
||||
Selecting a revision number will download that revision of
|
||||
the file. There is a link at each revision to display
|
||||
diffs between that revision and the previous one, and
|
||||
a form at the bottom of the page that allows you to
|
||||
display diffs between arbitrary revisions.
|
||||
</p>
|
||||
<p>
|
||||
This script
|
||||
(<a href="http://www.lyra.org/greg/python/viewcvs/">ViewCVS</a>)
|
||||
has been written by Greg Stein
|
||||
<<a href="mailto:gstein@lyra.org">gstein@lyra.org</a>>
|
||||
based on the
|
||||
<a href="http://linux.fh-heilbronn.de/~zeller/cgi/cvsweb.cgi">cvsweb</a>
|
||||
script by Henner Zeller
|
||||
<<a href="mailto:zeller@think.de">zeller@think.de</a>>;
|
||||
it is covered by the
|
||||
<a href="http://www.opensource.org/licenses/bsd-license.html">BSD
|
||||
Licence</a>.
|
||||
If you would like to use this CGI script on your own web server and
|
||||
CVS tree, see Greg's
|
||||
<a href="http://www.lyra.org/greg/python/viewcvs/">ViewCVS distribution
|
||||
site</a>.
|
||||
Please send any suggestions, comments, etc. to
|
||||
<a href="mailto:gstein@lyra.org">Greg Stein</a>.
|
||||
</p>
|
||||
|
||||
doc_info =
|
||||
<h3>CVS Documentation</h3>
|
||||
<blockquote>
|
||||
<p>
|
||||
<a href="http://www.loria.fr/~molli/cvs/doc/cvs_toc.html">CVS
|
||||
User's Guide</a><br>
|
||||
<a href="http://www.arc.unm.edu/~rsahu/cvs.html">CVS Tutorial</a><br>
|
||||
<a href="http://cellworks.washington.edu/pub/docs/cvs/tutorial/cvs_tutorial_1.html">Another CVS tutorial</a><br>
|
||||
<a href="http://www.csc.calpoly.edu/~dbutler/tutorials/winter96/cvs/">Yet
|
||||
another CVS tutorial (a little old, but nice)</a><br>
|
||||
<a href="http://www.cs.utah.edu/dept/old/texinfo/cvs/FAQ.txt">An old but
|
||||
very useful FAQ about CVS</a>
|
||||
</p>
|
||||
</blockquote>
|
||||
|
||||
repository_info =
|
||||
<!-- insert repository access instructions here -->
|
||||
|
||||
#---------------------------------------------------------------------------
|
||||
[options]
|
||||
### DOC
|
||||
|
||||
# sort_by: File sort order
|
||||
# file Sort by filename
|
||||
# rev Sort by revision number
|
||||
# date Sort by commit date
|
||||
# author Sort by author
|
||||
# log Sort by log message
|
||||
sort_by = file
|
||||
|
||||
# hide_attic: Hide or show files in Attic
|
||||
# 1 Hide files in Attic
|
||||
# 0 Show files in Attic
|
||||
hide_attic = 1
|
||||
|
||||
# log_sort: Sort order for CVS logs
|
||||
# date Sort revisions by date
|
||||
# rev Sort revision by revision number
|
||||
# cvs Don't sort them. Same order as CVS/RCS shows them.
|
||||
log_sort = date
|
||||
|
||||
# diff_format: Default diff format
|
||||
# h Human readable
|
||||
# u Unified diff
|
||||
# c Context diff
|
||||
# s Side by side
|
||||
# H Long human readable
|
||||
diff_format = h
|
||||
|
||||
# hide_cvsroot: Don't show the CVSROOT directory
|
||||
# 1 Hide CVSROOT directory
|
||||
# 0 Show CVSROOT directory
|
||||
hide_cvsroot = 1
|
||||
|
||||
# hide_non_readable: Don't show entries which cannot be read
|
||||
# 1 Hide non-readable entries
|
||||
# 0 Show non-readble entries
|
||||
hide_non_readable = 1
|
||||
|
||||
# Show author of last change
|
||||
show_author = 1
|
||||
|
||||
# set to 1 to make lines break at spaces,
|
||||
# set to 0 to make no-break lines,
|
||||
# set to a positive integer to make the lines cut at that length
|
||||
hr_breakable = 1
|
||||
|
||||
# give out function names in human readable diffs
|
||||
# this just makes sense if we have C-files, otherwise
|
||||
# diff's heuristic doesn't work well ..
|
||||
# ( '-p' option to diff)
|
||||
hr_funout = 0
|
||||
|
||||
# ignore whitespaces for human readable diffs
|
||||
# (indendation and stuff ..)
|
||||
# ( '-w' option to diff)
|
||||
hr_ignore_white = 1
|
||||
|
||||
# ignore diffs which are caused by
|
||||
# keyword-substitution like $Id - Stuff
|
||||
# ( '-kk' option to rcsdiff)
|
||||
hr_ignore_keyword_subst = 1
|
||||
|
||||
# allow annotation of files.
|
||||
# NOTE: this requires rw-access to the CVSROOT/history file, and rw-access to
|
||||
# the subdirectory to place the lock... so you maybe don't want it
|
||||
# WARNING: this is not yet implemented!!
|
||||
allow_annotate = 0
|
||||
|
||||
# allow pretty-printed version of files
|
||||
allow_markup = 1
|
||||
|
||||
# allow compression with gzip of output if the Browser accepts it
|
||||
# (HTTP_ACCEPT_ENCODING=gzip)
|
||||
# [make sure to have gzip in the path]
|
||||
allow_compress = 1
|
||||
|
||||
# Make use of javascript functions to skip the need for submitting a form.
|
||||
# For example, this way you can select one of your CVS roots without
|
||||
# pressing 'Go' (... if you have more than one CVSROOT defined)
|
||||
use_java_script = 1
|
||||
|
||||
# open Download-Links in another window
|
||||
open_extern_window = 1
|
||||
|
||||
# The size of this extern window; this size option needs use_java_script
|
||||
# to be defined
|
||||
extern_window_width = 600
|
||||
extern_window_height = 440
|
||||
|
||||
# If you have files which automatically refers to other files
|
||||
# (such as HTML) then this allows you to browse the checked
|
||||
# out files as if outside CVS.
|
||||
checkout_magic = 1
|
||||
|
||||
# Show last changelog message for sub directories
|
||||
# The current implementation makes many assumptions and may show the
|
||||
# incorrect file at some times. The main assumption is that the last
|
||||
# modified file has the newest filedate. But some CVS operations
|
||||
# touches the file without even when a new version is't checked in,
|
||||
# and TAG based browsing essientially puts this out of order, unless
|
||||
# the last checkin was on the same tag as you are viewing.
|
||||
# Enable this if you like the feature, but don't rely on correct results.
|
||||
show_subdir_lastmod = 0
|
||||
|
||||
# show a portion of the most recent log entry in directory listings
|
||||
show_logs = 1
|
||||
|
||||
# Show CVS log when viewing file contents
|
||||
show_log_in_markup = 1
|
||||
|
||||
# == Configuration defaults ==
|
||||
# Defaults for configuration variables that shouldn't need
|
||||
# to be configured..
|
||||
allow_version_select = 1
|
||||
|
||||
#
|
||||
# If you want to use Marc-Andrew Lemburg's py2html (and Just van Rossum's
|
||||
# PyFontify) to colorize Python files, then you may need to change this
|
||||
# variable to point to their directory location.
|
||||
#
|
||||
# This directory AND the standard Python path will be searched.
|
||||
#
|
||||
py2html_path = .
|
||||
#py2html_path = /usr/local/lib/python1.5/site-python
|
||||
|
||||
# the length to which the most recent log entry should be truncated when
|
||||
# shown in the directory view
|
||||
short_log_len = 80
|
||||
|
||||
table_padding = 2
|
||||
|
||||
diff_font_face = Helvetica,Arial
|
||||
diff_font_size = -1
|
||||
|
||||
# the width of the textinput in the request-diff-form
|
||||
input_text_size = 12
|
||||
|
||||
#---------------------------------------------------------------------------
|
@@ -13,8 +13,7 @@
|
||||
(by <a href="mailto:zeller@think.de">Henner Zeller</a>).
|
||||
I wanted to make some changes and updates, but cvsweb was
|
||||
implemented in Perl (and rather poorly, IMO). So I undertook the
|
||||
task to convert the software to
|
||||
<a href="http://www.python.org/"><i>Python</i></a>.
|
||||
task to convert the software to Python.
|
||||
</p>
|
||||
<p>
|
||||
ViewCVS can browse directories, change logs, and specific
|
||||
@@ -22,11 +21,11 @@
|
||||
show selections of files based on tags or branches.
|
||||
</p>
|
||||
<p>
|
||||
ViewCVS is currently at version 0.3. It is almost a straight
|
||||
ViewCVS is currently at version 0.2. It is almost a straight
|
||||
port of the cvsweb script, but has had numerous cleanups and other
|
||||
modifications, based on some of Python's strengths. There is
|
||||
still some "badness" in there, but I've been working on flushing
|
||||
that out, along with a few new features. The
|
||||
that out, along with my work to start adding features. The
|
||||
functionality of ViewCVS is equal to that of cvsweb, minus the
|
||||
"annotation" support. Annotation requires read/write access to
|
||||
the CVS repository (at this time), and I believe that is a
|
||||
@@ -37,7 +36,7 @@
|
||||
The software is available for download:
|
||||
</p>
|
||||
<blockquote>
|
||||
<a href="viewcvs-0.3.tar.gz">Version 0.3 of ViewCVS</a>
|
||||
<a href="viewcvs-0.2.tar.gz">Version 0.2 of ViewCVS</a>
|
||||
</blockquote>
|
||||
<p>
|
||||
Of course, it is also available through ViewCVS itself:
|
||||
@@ -51,26 +50,20 @@
|
||||
1.5.2</strong></font>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
If you have any comments, questions, or suggestions, then please
|
||||
email me at
|
||||
<a href="mailto:gstein@lyra.org">gstein@lyra.org</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
[ <a href="../">up to Python software</a> ]
|
||||
[ <a href="../../">up to Greg's page</a> ]
|
||||
</p>
|
||||
|
||||
<hr width="75%">
|
||||
<h2>Mailing List</h2>
|
||||
|
||||
<p>
|
||||
If you have any comments, questions, suggestions, or patches,
|
||||
then please send them to the
|
||||
<a href="http://mailman.lyra.org/mailman/listinfo/viewcvs">ViewCVS
|
||||
mailing list</a>.
|
||||
</p>
|
||||
|
||||
<hr width="75%">
|
||||
<h2>FAQ</h2>
|
||||
|
||||
<p>Kinda short :-)</p>
|
||||
|
||||
<dl>
|
||||
<!-- one of (dd dt) -->
|
||||
<dt><strong>I got an <code>AttributeError: urlencode</code></strong></dt>
|
||||
@@ -94,65 +87,11 @@ AttributeError: urlencode
|
||||
</dd>
|
||||
</dl>
|
||||
|
||||
<hr width="75%">
|
||||
<h2>Additional features over cvsweb</h2>
|
||||
|
||||
<ul>
|
||||
<li>Colorization for Python files</li>
|
||||
<li>Better reporting for unreadable files</li>
|
||||
<li>More robust when given varying <code>rcsdiff</code> or
|
||||
<code>rlog</code> outputs</li>
|
||||
<li>Hard breaks in human-readable diffs</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Future features, coming soon:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Optional, separate configuration file (similar to
|
||||
cvsweb). This will make upgrading easier.
|
||||
</li>
|
||||
<li>UI streamlining/simplification</li>
|
||||
<li>Integration with CVS checkin auto-mail scripts</li>
|
||||
<li>
|
||||
<i>Suggestions? Send mail to the
|
||||
<a href="mailto:viewcvs@lyra.org">viewcvs@lyra.org</a>
|
||||
mailing list.
|
||||
</i>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<p>
|
||||
Longer term:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Annotation ("blame") support (similar to cvsweb)</li>
|
||||
<li>Integration with an indexer such as LXR</li>
|
||||
<li>Additional colorizers</li>
|
||||
</ul>
|
||||
|
||||
<hr width="75%">
|
||||
<h2>Colorization of Python files</h2>
|
||||
|
||||
<p>
|
||||
Christophe Pelte suggested this feature: colorize Python source
|
||||
files using
|
||||
<a href="http://starship.python.net/crew/lemburg/SoftwareDescriptions.html#py2html.py">py2html</a>
|
||||
(by Marc-Andrew Lemburg, based on
|
||||
<a href="http://starship.python.net/crew/just/code/PyFontify.py">PyFontify</a>
|
||||
by Just van Rossum). I've added this feature to ViewCVS 0.3,
|
||||
along with a generalized plugin mechanism for custom coloring other
|
||||
types of files. See the instructions within the viewcvs.cgi for
|
||||
setting the <code>py2html_path</code> configuration variable if
|
||||
you want to use this feature.
|
||||
</p>
|
||||
|
||||
<hr>
|
||||
<address><a href="mailto:gstein@lyra.org">Greg Stein</a></address>
|
||||
<!-- Created: Fri Dec 3 02:51:37 PST 1999 -->
|
||||
<!-- hhmts start -->
|
||||
Last modified: Fri Feb 11 07:51:53 PST 2000
|
||||
Last modified: Wed Jan 12 03:12:22 PST 2000
|
||||
<!-- hhmts end -->
|
||||
</body>
|
||||
</html>
|
||||
|
Reference in New Issue
Block a user