Commit Graph

7273 Commits

Author SHA1 Message Date
Adrian Buehlmann
9a67b02dba move rcpath from util to scmutil 2011-04-21 20:14:29 +02:00
Matt Mackall
c0ef80263c win32: Wine doesn't know about hardlinks 2011-04-21 15:08:48 -05:00
Adrian Buehlmann
267c80394b move walkrepos from util to scmutil 2011-04-21 16:06:19 +02:00
Adrian Buehlmann
756a1d3529 move checkfilename from util to scmutil
checkfilename is specific to Mercurial, since it contains the knowledege
that Mercurial can't track files with \n or \r in the name.
2011-04-21 13:18:52 +02:00
Adrian Buehlmann
bf5585ac5b scmutil: fix erroneous Abort call
This fixes d26b1348d3f6 (affected Windows only).
2011-04-21 12:10:03 +02:00
Adrian Buehlmann
307196b733 move path_auditor from util to scmutil 2011-04-20 22:43:31 +02:00
Adrian Buehlmann
f3e8eae526 move canonpath from util to scmutil 2011-04-20 21:41:41 +02:00
Adrian Buehlmann
cf126bb7dd move opener from util to scmutil 2011-04-20 19:54:57 +02:00
Matt Mackall
a33ce77f33 dispatch: improve repository not found message
This should help clarify what the problem is in various problematic
cases like ssh.
2011-04-20 14:28:40 -05:00
Steven Stallion
6daa9da6c9 hgweb: support disabling page cache
By default, hgweb_mod supports caching via the ETag header. This can
cause some confusion with browsers which cache aggressively. This change
preserves existing behavior while giving the administrator a knob to
disable the ETag header.
2011-04-20 00:01:50 -04:00
Matt Mackall
27af4239ba merge with stable 2011-04-20 12:44:32 -05:00
Steven Stallion
239482dbab hgweb: support alternate logo url
Clicking on the logo image/text in the hgweb interface brings the
user to the Mercurial project page. The majority of users expect that
this would bring them to the top level index. I have added a new template
variable named `logourl' which allows an administrator to change this
behavior. To stay compatible with existing behavior, `logourl' will
default to http://mercurial.selenic.com/. This change is very useful in
large installations where jumping to the index is common.
2011-04-19 23:37:06 -04:00
Adrian Buehlmann
fc7e20743c add: introduce a warning message for non-portable filenames (issue2756) (BC)
On POSIX platforms, the 'add', 'addremove', 'copy' and 'rename' commands now
warn if a file has a name that can't be checked out on Windows.

Example:

  $ hg add con.xml
  warning: filename contains 'con', which is reserved on Windows: 'con.xml'
  $ hg status
  A con.xml

The file is added despite the warning.

The warning is ON by default. It can be suppressed by setting the config option
'portablefilenames' in section 'ui' to 'ignore' or 'false':

  $ hg --config ui.portablefilenames=ignore add con.xml
  $ hg sta
  A con.xml

If ui.portablefilenames is set to 'abort', then the command is aborted:

  $ hg --config ui.portablefilenames=abort add con.xml
  abort: filename contains 'con', which is reserved on Windows: 'con.xml'

On Windows, the ui.portablefilenames config setting is irrelevant and the
command is always aborted if a problematic filename is found.
2011-04-19 12:42:53 +02:00
Adrian Buehlmann
abbf9698d1 paper: use monospace font for description 2011-04-19 14:56:47 +02:00
Idan Kamara
392e524251 update: fix check for no rev when a date is given
The previous check caught a corner case in which rev
was pointing to 0.
2011-04-19 14:56:46 +03:00
Martin Geisler
5a3f4fec03 merge with stable 2011-04-19 15:19:54 +02:00
Matt Mackall
3960f4de1d merge with stable 2011-04-18 20:52:08 -05:00
Idan Kamara
3adc383a95 identify: restructure code to make it more readable 2011-04-19 01:08:35 +03:00
Adrian Buehlmann
3a0445e3c8 templatefilters: improve person() for john.doe@example.com
BEFORE: person('john.doe@example.com') -> 'john'
AFTER:  person('john.doe@example.com') -> 'john doe'
2011-04-17 21:34:25 +02:00
Adrian Buehlmann
3efb31d590 help: do not show full help text for command on option errors
Example

  $ hg clone --jump foo bar
  hg clone: option --jump not recognized
  hg clone [OPTION]... SOURCE [DEST]

  make a copy of an existing repository

  options:

   -U --noupdate           the clone will include an empty working copy (only a
                           repository)
   -u --updaterev REV      revision, tag or branch to check out
   -r --rev REV [+]        include the specified changeset
   -b --branch BRANCH [+]  clone only the specified branch
      --pull               use pull protocol to copy metadata
      --uncompressed       use uncompressed transfer (fast over LAN)
   -e --ssh CMD            specify ssh command to use
      --remotecmd CMD      specify hg command to run on the remote side
      --insecure           do not verify server certificate (ignoring
                           web.cacerts config)

  [+] marked option can be specified multiple times

  use "hg help clone" to show the full help text

Motivation for this change

  If the user already has specified the command, he probably already knows
  the command to some extent. Apparently, he has a problem with the options,
  so we show him just the synopsis with the short help and the details about
  the options, with a hint on the last line how to get the full help text.

Why is Mercurial better with this change?

  Experts who just forgot about the details of an option don't get that
  much text thrown at them, while the newbies still get a hint on the last
  line how to get the full help text.
2011-04-17 11:37:11 +02:00
Adrian Buehlmann
d3fe813516 store: add some doctests 2011-04-17 17:55:34 +02:00
Adrian Buehlmann
8c547b2690 paper: don't add breaks on the remaining instances of desc
fixes 53d942b9d381
2011-04-17 01:44:09 +02:00
Adrian Buehlmann
a3a3063c9b checkwinfilename: use %r in format string 2011-04-16 20:08:43 +02:00
Adrian Buehlmann
53cf962dbf copy: do not copy file if name is disallowed anyway 2011-04-15 16:15:32 +02:00
Adrian Buehlmann
bd5adb64fa util: new function checkfilename
checkfilename checks for restrictions on filenames imposed by Mercurial
itself, irrespective of on what platform it is run.
2011-04-15 16:15:30 +02:00
Adrian Buehlmann
c36b2f94e7 opener: use %r in format string for abort 2011-04-15 16:15:28 +02:00
Shuhei Takahashi
ae68689a32 wireproto: allow unbundle with hashed heads parameter (issue2126)
Current wire protocol of unbundle sends the list of all heads in the remote
repository to avoid race condition.  This causes "URL too long" error on HTTP
server when the repository has many heads.

This change allows clients to send SHA1 hash of sorted head hashes instead.
Also, this introduces "unbundlehash" capability to inform them that the server
accepts hashed heads parameter.
2011-04-16 01:05:56 +09:00
Matt Mackall
3f6dd3fae1 merge with stable 2011-04-15 23:46:59 -05:00
Matt Mackall
cbcd1a72f3 merge with stable 2011-04-15 20:35:59 -05:00
Idan Kamara
cb694c6958 revset: optimize stringset when subset == entire repo
if range(len(repo)) is passed to stringset and x is a valid rev
(checked before) then x is guaranteed to be in subset, we can check
for that by comparing the lengths of the sets
2011-04-15 20:07:44 +03:00
Adrian Buehlmann
f09cdf598a paper: preserve whitespace on description instead of adding breaks
This preserves the indentation of text in the changeset description.

This is useful for example for descriptions containing command line
use case examples like:

  $ hg -q heads
  13934:648a834cca14
  13912:1d866b621bf7

Without this patch, such space-char indented text was just left aligned.
2011-04-15 10:56:26 +02:00
Augie Fackler
4f0fd8fe64 compact style: show bookmarks in the same manner as tags 2011-04-13 13:06:35 -05:00
Augie Fackler
52f8941398 revsets: preserve ordering with the or operator
This is valuable because now revsets like 'bookmarks() or tip' will
always show tip after bookmarks unless tip was itself a bookmark. This
is a somewhat contrived example, but this behavior is useful for
"where am I" type aliases that use log and revsets.
2011-04-13 12:30:41 -05:00
Md. O. Shayan
20e62c51a1 hgweb: set minimum number of revision to display to 1 when revcount is 0
When revcount goes to 0 nothing is displayed in hgweb. This patch sets revcount to max(revcount, 1).
2011-04-13 07:40:24 +05:30
Idan Kamara
22e5d8d701 localrepo: don't add deleted files to list of modified/added files (issue2761)
If a file is deleted (rm, not 'hg rm') from the working dir
an attempt to run 'hg diff -r X', with the file being present in X will
cause an abort.

We didn't check if the file has been deleted from the working dir
and later on tried to open it to compare with the one from X, causing the abort.

This fix adds that check. Consequently, no output will be returned.
2011-04-11 21:44:22 +03:00
Adrian Buehlmann
a61eaad778 path_auditor: eliminate local function 'check' in __call__ 2011-04-11 10:06:57 +02:00
Augie Fackler
7070a6da65 subrepo: trailing whitespace cleanup 2011-04-11 07:34:40 -05:00
Adrian Buehlmann
a5b6c426a2 util: move checkosfilename call from path_auditor to opener
path_auditor is used for checking patterns too, but a pattern is not a valid
filename.

This patch fixes fb1792e89e34, which introduced the bug:

  $ hg log -l3 glob:**.py
  abort: filename contains '*', which is reserved on Windows: mercurial\**.py
2011-04-10 19:31:49 +02:00
Yuya Nishihara
109c433261 hgweb: add bookmarks listing to summary page of gitweb/monoblue styles 2011-04-10 10:01:42 +09:00
Yuya Nishihara
fe54e1ef28 hgweb: remove useless notip handling from bookmarks listing 2011-04-10 10:01:39 +09:00
Yuya Nishihara
723e882e64 hgweb: sort bookmarks in the same manner as console command 2011-04-10 10:01:37 +09:00
Yuya Nishihara
9446b862c9 hgweb: add bookmarks listing to raw style with test case 2011-04-10 06:37:20 +09:00
Md. O. Shayan
475f1c2d09 grep: don't print data from binary files for matches (issue2614) 2011-04-09 23:13:17 +05:30
Patrick Mezard
3616aca56a subrepo: handle svn tracked/unknown directory collisions
This happens more often than expected. Say you have an svn subrepository with
python code. Python would have generated unknown .pyc files. Now, you rebase
this setup on a revision where a directory containing python code does not
exist. Subversion is first asked to remove this directory when updating, but
will not because it contains untracked items. Then it will have to bring back
the directory after the merge but will fail because it now collides with an
untracked directory.

Using --force is not very elegant and only works with svn >= 1.5 but the only
alternative I can think of is to write our own purge command for subversion.
2011-03-04 14:00:49 +01:00
Adrian Buehlmann
9b801e586d path_auditor: check filenames for basic platform validity (issue2755)
Example (on Windows):

  $ hg parents
  $ hg manifest tip
  con.xml
  $ hg update
  abort: filename contains 'con', which is reserved on Windows: con.xml

Before this patch, update produced (as explained in issue2755):

  $ hg update
  abort: No usable temporary filename found

I've added the new function checkwinfilename to util.py and not to windows.py,
so that we can later call it when running on posix platforms too, for when we
decide to implement a (configurable) warning message on 'hg add'.

As per this patch, checkwinfilename is currently only used when running
on Windwows.

path_auditor calls checkosfilename, which is a NOP on posix and an alias for
checkwinfilename on Windows.
2011-04-06 18:09:43 +02:00
Idan Kamara
05b035daf6 revset: rearrange code so functions are sorted alphabetically 2011-04-08 17:47:58 +03:00
Idan Kamara
32b6eeef14 revset: abort when tag or bookmark doesn't exist 2011-04-07 19:24:16 +03:00
Idan Kamara
17914fe278 bookmarks: change error messages to match those given by 'hg tag' commands 2011-04-07 17:57:38 +03:00
Matt Mackall
ddc767098f audit: improve nested repo message 2011-04-07 14:43:19 -05:00
Idan Kamara
9fe3148843 tags: remove another check for valid nodes
see 3a1c93dc25b9
2011-04-07 17:16:17 +03:00
Idan Kamara
35ad577c17 revset: replace for-loop with list comprehension 2011-04-07 16:20:40 +03:00
Martin Geisler
be192b7fa4 merge with stable 2011-04-07 11:40:54 +02:00
Martin Geisler
43d795e497 commit: note when files are missing
Before, you could experience the following strange interaction:

  $ hg commit
  nothing changed
  $ hg merge
  abort: outstanding uncommitted changes

which confused at least one user in #mercurial.
2011-04-06 16:21:12 +02:00
Thomas Arendsen Hein
1b0518593c hg: make parseurl() consistently return normalised path
Before this the path was only normalised when a fragment was used.
2011-04-06 12:48:59 +02:00
Idan Kamara
bcbd1c4dc5 tags: no need to check for valid nodes
_findtags in localrepo checks that nodes exist in the revlog so we
can't get a LookupError here.

The output of 'hg tags' stays the same since tags to unknown nodes
didn't get printed before anyway due to 734bab2916a6.
2011-04-04 23:43:22 +03:00
Idan Kamara
c341aeb03e localrepo: ignore tags to unknown nodes (issue2750) 2011-04-04 22:51:10 +03:00
Arne Babenhauserheide
8fe2ac6071 merge: added info that hg help merge-tools shows the options for --tool 2011-04-05 19:48:44 +02:00
Adrian Buehlmann
34d2bab4e0 util: move checklink() to posix.py and return False on Windows
Python added support for Windows 6.0 (Vista) symbolic links in 3.2 [1], but
even these symbolic links aren't what we can expect from a canonical
symbolic link, since creation requires SeCreateSymbolicLinkPrivilege,
which typically only admins have.

So we can safely assume that we don't have symbolic links on Windows.

[1] http://docs.python.org/py3k/library/os.html#os.symlink
2011-04-05 11:55:52 +02:00
Yun Lee
234710b7b8 util: make 'hg log -d --2' abort (issue2734) 2011-04-05 16:55:47 +08:00
Yun Lee
fd8965dcbb help: sort help topics to make the output more readable (issue2751) 2011-04-05 12:40:47 +08:00
Martin Geisler
77c3683101 merge with stable 2011-04-05 11:09:08 +02:00
Martin Geisler
a5339415db help/dates: use DATE as place-holder in help and abort texts
The use of "{datetime}" was unfortunate since I as a user never knew
if I was expected to do

  hg log -d '>{2011-04-01}'

or

  hg log -d '>2011-04-01'

The word "datetime" is also confusing -- calling it a date it much
simpler.
2011-04-05 10:01:39 +02:00
Adrian Buehlmann
b82d6c0417 util: move checkexec() to posix.py and return False on Windows 2011-04-04 11:41:54 +02:00
Matt Mackall
a8dd64dcb0 misc: replace .parents()[0] with p1() 2011-04-04 16:21:59 -05:00
Matt Mackall
d4af650e6a filectx: introduce p1/p2 convenience methods 2011-04-04 16:21:57 -05:00
Matt Mackall
191a7d2110 dirstate: add p1/p2 convenience methods 2011-04-04 15:52:55 -05:00
Matt Mackall
a9a1073611 merge: add ancestor to the update function
This makes it easier to do rebase-like operations.
2011-04-04 15:25:20 -05:00
Matt Mackall
8bd04923bb revset: teach optimizer that closed is slowish 2011-04-04 14:21:54 -05:00
Idan Kamara
8b72616ae0 localrepo: tighten except clause when looking rev 2011-04-04 18:05:14 +03:00
Matt Mackall
9da968682d date: fixup breakage from ">" fix 2011-04-04 09:39:22 -05:00
Matt Mackall
e6415d7dd7 merge with stable 2011-04-04 08:26:08 -05:00
Yun Lee
8e6828ba03 log: abort for -d '>' or -d '<' (issue2749) 2011-04-04 00:23:21 +08:00
Adrian Buehlmann
b66c4be0ad subrepo: process merge substate in sorted order in submerge()
This ensures that subrepositories are pulled in a well defined
order when cloning the parent repository.

BEFORE:

  $ hg clone http://hg.gerg.ca/allextensions
  destination directory: allextensions
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 10 changesets with 20 changes to 6 files
  updating to branch default
  pulling subrepo caseguard from http://bitbucket.org/alexandru/caseguard
  real URL is https://bitbucket.org/alexandru/caseguard
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 81 changesets with 100 changes to 13 files
  pulling subrepo hg-prompt from http://bitbucket.org/sjl/hg-prompt
  real URL is https://bitbucket.org/sjl/hg-prompt
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 114 changesets with 176 changes to 35 files
  pulling subrepo hgpaste from http://bitbucket.org/birkenfeld/hgpaste
  real URL is https://bitbucket.org/birkenfeld/hgpaste
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 18 changesets with 18 changes to 2 files
  ...

AFTER:

  $ hg clone http://hg.gerg.ca/allextensions
  destination directory: allextensions
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 10 changesets with 20 changes to 6 files
  updating to branch default
  pulling subrepo Artemis from http://hg.mrzv.org/Artemis
  requesting all changes
  adding changesets
  adding manifests
  adding file changes
  added 55 changesets with 108 changes to 47 files
  ...
2011-04-03 01:57:17 +02:00
Adrian Buehlmann
9db9ae7e0e revert: note that added files are left as is 2011-04-01 22:44:58 +02:00
Kevin Gessner
fd940915e4 hgweb: add base link to file log for paper and coal styles (issue2452) 2011-03-31 15:49:53 -04:00
Brodie Rao
5f24d65643 HGPLAIN: allow exceptions to plain mode, like i18n, via HGPLAINEXCEPT
This makes it possible to gain the benefits of HGPLAIN for scripting
while preserving different behaviors like internationalization.
2011-01-05 00:18:36 +11:00
Brodie Rao
3bbcdd41bc url: be stricter about detecting schemes
While the URL parser is very forgiving about what characters are
allowed in each component, it's useful to be strict about the scheme
so we don't accidentally interpret local paths with colons as URLs.

This restricts schemes to containing alphanumeric characters, dashes,
pluses, and dots (as specified in RFC 2396).
2011-03-31 17:37:33 -07:00
Martin Geisler
7ec188ab1d merge with stable 2011-04-01 12:21:59 +02:00
Matt Mackall
1fb0b59ceb changegroup: introduce bundler objects
This makes the bundler pluggable at lower levels.
2011-03-31 15:24:06 -05:00
Matt Mackall
609353a898 changegroup: combine lookup functions 2011-03-31 14:25:26 -05:00
Matt Mackall
cd49a753c7 changegroup: unnest flookup 2011-03-31 13:56:05 -05:00
Matt Mackall
d0ca936e58 url: nuke some newly-introduced underbars in identifiers 2011-03-31 10:43:53 -05:00
Brodie Rao
3a43fa887e url: refactor util.drop_scheme() and hg.localpath() into url.localpath()
This replaces util.drop_scheme() with url.localpath(), using url.url for
parsing instead of doing it on its own. The function is moved from
util to url to avoid an import cycle.

hg.localpath() is removed in favor of using url.localpath(). This
provides more consistent behavior between "hg clone" and other
commands.

To preserve backwards compatibility, URLs like bundle://../foo still
refer to ../foo, not /foo.

If a URL contains a scheme, percent-encoded entities are decoded. When
there's no scheme, all characters are left untouched.

Comparison of old and new behaviors:

URL                      drop_scheme()   hg.localpath()    url.localpath()
===                      =============   ==============    ===============
file://foo/foo           /foo            foo/foo           /foo
file://localhost:80/foo  /foo            localhost:80/foo  /foo
file://localhost:/foo    /foo            localhost:/foo    /foo
file://localhost/foo     /foo            /foo              /foo
file:///foo              /foo            /foo              /foo
file://foo               (empty string)  foo               /
file:/foo                /foo            /foo              /foo
file:foo                 foo             foo               foo
file:foo%23bar           foo%23bar       foo%23bar         foo#bar
foo%23bar                foo%23bar       foo%23bar         foo%23bar
/foo                     /foo            /foo              /foo

Windows-related paths on Windows:

URL                      drop_scheme()   hg.localpath()    url.localpath()
===                      =============   ==============    ===============
file:///C:/foo           C:/C:/foo       /C:/foo           C:/foo
file:///D:/foo           C:/D:/foo       /D:/foo           D:/foo
file://C:/foo            C:/foo          C:/foo            C:/foo
file://D:/foo            C:/foo          D:/foo            D:/foo
file:////foo/bar         //foo/bar       //foo/bar         //foo/bar
//foo/bar                //foo/bar       //foo/bar         //foo/bar
\\foo\bar                //foo/bar       //foo/bar         \\foo\bar

Windows-related paths on other platforms:

file:///C:/foo           C:/C:/foo       /C:/foo           C:/foo
file:///D:/foo           C:/D:/foo       /D:/foo           D:/foo
file://C:/foo            C:/foo          C:/foo            C:/foo
file://D:/foo            C:/foo          D:/foo            D:/foo
file:////foo/bar         //foo/bar       //foo/bar         //foo/bar
//foo/bar                //foo/bar       //foo/bar         //foo/bar
\\foo\bar                //foo/bar       //foo/bar         \\foo\bar

For more information about file:// URL handling, see:
http://www-archive.mozilla.org/quality/networking/testing/filetests.html

Related issues:

- issue1153: File URIs aren't handled correctly in windows

  This patch should preserve the fix implemented in
  5c92d05b064e. However, it goes a step further and "promotes"
  Windows-style drive letters from being interpreted as host names to
  being part of the path.

- issue2154: Cannot escape '#' in Mercurial URLs (#1172 in THG)

  The fragment is still interpreted as a revision or a branch, even in
  paths to bundles. However, when file: is used, percent-encoded
  entities are decoded, so file:test%23bundle.hg can refer to
  test#bundle.hg ond isk.
2011-03-30 20:03:05 -07:00
Brodie Rao
8f5f4f569c url: use url.url in ui.expandpath() 2011-03-30 20:02:17 -07:00
Brodie Rao
00a75e8663 hg: use url.url to parse branch names in parseurl() 2011-03-30 20:02:09 -07:00
Brodie Rao
9b6a7577e1 hg: look up schemes using url.url 2011-03-30 20:02:07 -07:00
Brodie Rao
744f9e0914 hgweb: use url.url when setting CGI environment variables 2011-03-30 20:01:46 -07:00
Brodie Rao
82ebe71a03 url: use url.url in proxyhandler 2011-03-30 20:01:44 -07:00
Brodie Rao
de32ed5320 httprepo/sshrepo: use url.url
Like the previous patch to getauthinfo(), this also makes
username/password parsing more forgiving for SSH URLs.

This also opens up the possibility of allowing non-numeric ports,
since the URL parser has no problem handling them.

Related issues:

- issue851: @ in password in http url
- issue2055: nonnumeric port bug with https protocol
2011-03-30 20:01:35 -07:00
Brodie Rao
c01046e0d6 url: use url.url in url.open() 2011-03-30 20:01:34 -07:00
Brodie Rao
80fd2713db url: abort on file:// URLs with non-localhost hosts 2011-03-30 20:01:31 -07:00
Brodie Rao
7db4593199 url: special case bundle URL parsing to preserve backwards compatibility
This allows bundle://../foo to continue to refer to the relative path
../foo (bundle URLs do not take host names).
2011-03-30 20:00:24 -07:00
Brodie Rao
40c99bbacb url: add trailing slashes to URLs with hostnames that don't have one
This works around a potential issue in Python 2.4 where cloning a repo
with a URL like http://foo:8080 would cause urllib2 to query on
http://foo:8080?cmd=capabilities instead of
http://foo:8080/?cmd=capabilities.

In the past, this issue has been masked by the fact that
url.getauthinfo() added a trailing slash when it was missing.
2011-03-30 20:00:23 -07:00
Brodie Rao
193402d9df url: move drive letter checking into has_drive_letter() for extensions
This will let the schemes extension override drive letter detection to
allow single letter schemes.
2011-03-30 19:50:56 -07:00
Matt Mackall
d1e21c741d changegroup: unnest some lookup functions 2011-03-31 10:03:24 -05:00
Matt Mackall
70a486fc7f changegroup: minor ordering and renaming changes for similarity
This eliminates some needless differences between the two changegroup variants
2011-03-31 09:59:56 -05:00
Matt Mackall
2cd8ddf3e1 changegroup: remove nodeiter temporary 2011-03-31 09:56:27 -05:00
Matt Mackall
6cf532f349 changegroup: refactor prune as a filter 2011-03-30 17:50:34 -05:00
Matt Mackall
b62691ff5f changegroup: add first logic to send file header
This will allow us to later change how we filter needed file nodes
2011-03-30 17:50:27 -05:00
Matt Mackall
712f3e23d9 url: deal with drive letters 2011-03-30 13:34:39 -05:00