Merge lp:~geoff.bache/bzr/trunk into lp:bzr

Proposed by Robert Collins
Status: Merged
Merge reported by: Martin Pool
Merged at revision: not available
Proposed branch: lp:~geoff.bache/bzr/trunk
Merge into: lp:bzr
Diff against target: 571 lines (+501/-0) (has conflicts)
3 files modified
NEWS (+453/-0)
bzrlib/osutils.py (+19/-0)
bzrlib/tests/blackbox/test_add.py (+29/-0)
Text conflict in NEWS
Text conflict in bzrlib/osutils.py
Text conflict in bzrlib/tests/blackbox/test_add.py
To merge this branch: bzr merge lp:~geoff.bache/bzr/trunk
Reviewer Review Type Date Requested Status
John A Meinel Needs Fixing
Robert Collins (community) Needs Information
Review via email: mp+28463@code.launchpad.net

Commit message

Behave better when adding symlinks or things found via symlinks.

Description of the change

Handle 'bzr add symlink' (adds the symlink) and 'bzr add symlink/something' (adds something in the tree that something is actually contained in).

To post a comment you must log in.
Revision history for this message
Robert Collins (lifeless) wrote :

Need to audit this; we've clearly got *some* code in a similar direction merged from elsewhere already.

review: Needs Information
Revision history for this message
John A Meinel (jameinel) wrote :

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Robert Collins wrote:
> Robert Collins has proposed merging lp:~geoff.bache/bzr/trunk into lp:bzr.
>
> Requested reviews:
> bzr-core (bzr-core)
> Related bugs:
> #183831 bzr add <symlink> follows the link
> https://bugs.launchpad.net/bugs/183831
>
>
> Handle 'bzr add symlink' (adds the symlink) and 'bzr add symlink/something' (adds something in the tree that something is actually contained in).
>

 review: needsfixing

Quite a few things here.

1) It applies to a very old NEWS, before it was reformatted. So that
needs to be cleaned up and put in the new area.

2) + def test_add_with_symlink(self):
+ if not hasattr(os, "symlink"):
+ raise TestNotApplicable("Symbolic links not present")

We have a feature for symlinks that should be used.

3) I don't understand why this is getting added:
+ def test_add_with_wildcards_unicode(self):

4) The core loop is all confused because the patch is out-of-date.

5) The core loop is calling a function that will raise an exception for
every piece of the path processed.

To do it correctly, we should probably pull 'samepath()' into osutils.
And do:

def _samefile(f1, f2):
  return f1 == f2
samefile = getattr(os.path, 'samefile', _samefile)

Or something along those lines.

I don't really understand why samefile(head, base) is getting called,
nor why that would actually fix the symlink issues.

John
=:->

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (Cygwin)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAkwjyWcACgkQJdeBCYSNAAPg0QCg2HFhbBAYz2Y6zStD+BreezZc
bLoAnif5CgEntdRzfz2Q0uUlE0VqZxZx
=3ABk
-----END PGP SIGNATURE-----

review: Needs Fixing
Revision history for this message
John A Meinel (jameinel) wrote :

I'll poke at this and see if I can get it cleaned up.

Revision history for this message
Martin Pool (mbp) wrote :

John merged the equivalent of this. Thanks for the branch.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'NEWS'
2--- NEWS 2010-06-23 08:14:21 +0000
3+++ NEWS 2010-06-24 20:53:32 +0000
4@@ -1,5 +1,6 @@
5 ####################
6 Bazaar Release Notes
7+<<<<<<< TREE
8 ####################
9
10 .. contents:: List of Releases
11@@ -4548,6 +4549,458 @@
12 :Codename: 1234567890
13 :1.12: 2009-02-13
14 :1.12rc1: 2009-02-10
15+=======
16+--------------------
17+
18+.. contents::
19+
20+
21+
22+IN DEVELOPMENT
23+--------------
24+
25+ COMPATIBILITY BREAKS:
26+
27+ * bzr no longer autodetects nested trees as 'tree-references'. They
28+ must now be explicitly added tree references. At the commandline, use
29+ join --reference instead of add. (Aaron Bentley)
30+
31+ NEW FEATURES:
32+
33+ * shelve can now apply changes without storing anything on the shelf, via
34+ the new --destroy option. (Aaron Bentley)
35+
36+ * ``bzr send`` now accepts --body to specify an initial message body.
37+ (Aaron bentley)
38+
39+ IMPROVEMENTS:
40+
41+ * Branching from a stacked branch using ``bzr*://`` will now stream
42+ the data when the target repository does not need topological
43+ ordering, reducing round trips and network overhead. This uses the
44+ existing smart server methods added in 1.13, so will work on any
45+ 1.13 or newer server. (Robert Collins, Andrew Bennetts)
46+
47+ * ``bzr ignore`` gives a more informative message when existing
48+ version controlled files match the ignore pattern. (Neil
49+ Martinsen-Burrell, #248895)
50+
51+ * Progress bars now show the rate of network activity for
52+ ``bzr+ssh://`` and ``bzr://`` connections. (Andrew Bennetts)
53+
54+ * Streaming push can be done to older repository formats. This is
55+ implemented using a new ``Repository.insert_stream_locked`` RPC.
56+ (Andrew Bennetts, Robert Collins)
57+
58+ * Tildes are no longer escaped. No more %7Euser/project/branch!
59+ (Jonathan Lange)
60+
61+ BUG FIXES:
62+
63+ * Authentication plugins now receive all the parameters from the request
64+ itself (aka host, port, realm, path, etc). Previously, only the
65+ authentication section name, username and encoded password were
66+ provided. (Jean-Francois Roy)
67+
68+ * Fix "is not a stackable format" error when pushing a
69+ stackable-format branch with an unstackable-format repository to a
70+ destination with a default stacking policy. (Andrew Bennetts)
71+
72+ * Fixed incorrect "Source format does not support stacking" warning
73+ when pushing to a smart server. (Andrew Bennetts, #334114)
74+
75+ * It is no longer possible to fetch between repositories while the
76+ target repository is in a write group. This prevents race conditions
77+ that prevent the use of RPC's to perform fetch, and thus allows
78+ optimising more operations. (Robert Collins, Andrew Bennetts)
79+
80+ * ``merge --force`` works again. (Robert Collins, #342105)
81+
82+ * The GNU Changelog formatter is slightly improved in the case where
83+ the delta is empty, and now correctly claims not to support tags.
84+ (Andrea Bolognani)
85+
86+ * Shelve can now shelve changes to a symlink target.
87+ (James Westby, #341558)
88+
89+ * 'add' now works if there is a symlink in the path to the repository
90+ (Geoff Bache, #183831)
91+
92+ DOCUMENTATION:
93+
94+ * New topic `bzr help debug-flags`. (Martin Pool)
95+
96+ * The generated manpage now explicitly lists aliases as commands.
97+ (James Westby, #336998)
98+
99+ API CHANGES:
100+
101+ * New sort order for ``get_record_stream`` ``groupcompress`` which
102+ sorts optimally for use with groupcompress compressors. (John Arbash
103+ Meinel, Robert Collins)
104+
105+ * The ``get_credentials`` and ``set_credentials`` methods of
106+ ``AuthenticationConfig`` now accept an optional realm argument.
107+ (Jean-Francois Roy)
108+
109+ * The ``pb`` argument to ``fetch()`` is deprecated.
110+ (Martin Pool)
111+
112+ TESTING:
113+
114+ * ``bzrlib.tests.TestCase`` now fails the test if its own ``setUp``
115+ and ``tearDown`` weren't called. This catches faulty tests that
116+ forget to upcall when overriding ``setUp`` and ``tearDown``. Those
117+ faulty tests were not properly isolated.
118+ (Andrew Bennetts, Robert Collins)
119+
120+ INTERNALS:
121+
122+ * New ``assertLength`` method based on one Martin has squirreled away
123+ somewhere. (Robert Collins, Martin Pool)
124+
125+ * New repository method ``refresh_data`` to cause any repository to
126+ make visible data inserted into the repository by a smart server
127+ fetch operation. (Robert Collins, Andrew Bennetts)
128+
129+ * Removed ``InterRemoteToOther``, ``InterOtherToRemote`` and
130+ ``InterPackToRemotePack`` classes, as they are now unnecessary.
131+ (Andrew Bennetts)
132+
133+ * ``_walk_to_common_revisions`` will now batch up at least 50
134+ revisions before calling ``get_parent_map`` on the target,
135+ regardless of ``InterRepository``.
136+ (Andrew Bennetts, Robert Collins)
137+
138+
139+bzr 1.13rc1 "paraskavedekatriaphobia" 2009-03-10
140+------------------------------------------------
141+This release includes bug fixes and a few performance and feature improvements.
142+GNU Changelog output can now be produced by ``bzr log --format gnu-changelog``.
143+Debug flags can now be set in ``~/.bazaar/bazaar.conf``. Lightweight Checkouts
144+and Stacked Branches should both be much faster over remote connections.
145+
146+ COMPATIBILITY BREAKS:
147+
148+ * ``bzr log --line`` now indicates which revisions are merges with
149+ `[merge]` after the date. Scripts which parse the output of this
150+ command may need to be adjusted.
151+ (Neil Martinsen-Burrell)
152+
153+ NEW FEATURES:
154+
155+ * ``bzr reconfigure`` now supports --with-trees and --with-no-trees
156+ options to change the default tree-creation policy of shared
157+ repositories. (Matthew Fuller, Marius Kruger, #145033)
158+
159+ * Debug flags can now be set in ``~/.bazaar/bazaar.conf``.
160+ (Martin Pool)
161+
162+ * Filtered views provide a mask over the tree so that users can focus
163+ on a subset of a tree when doing their work. See ``Filtered views``
164+ in chapter 7 of the User Guide and ``bzr help view`` for details.
165+ (Ian Clatworthy)
166+
167+ * GNU Changelog output can now be produced by ``bzr log --format
168+ gnu-changelog``. (Andrea Bolognani, Martin Pool)
169+
170+ * The ``-Dmemory`` flag now gives memory information on Windows.
171+ (John Arbash Meinel)
172+
173+ * Multiple authors for a commit can now be recorded by using the "--author"
174+ option multiple times. (James Westby, #185772)
175+
176+ * New clean-tree command, from bzrtools. (Aaron Bentley, Jelmer Vernoij)
177+
178+ * New command ``bzr launchpad-open`` opens a Launchpad web page for that
179+ branch in your web browser, as long as the branch is on Launchpad at all.
180+ (Jonathan Lange)
181+
182+ * New API for getting bugs fixed by a revision: Revision.iter_bugs().
183+ (Jonathan Lange)
184+
185+ IMPROVEMENTS:
186+
187+ * All bzr ``Hooks`` classes are now registered in
188+ ``bzrlib.hooks.known_hooks``. This removes the separate list from
189+ ``bzrlib.tests`` and ensures that all hooks registered there are
190+ correctly isolated by the test suite (previously
191+ ``MutableTreeHooks`` were not being isolated correctly). Further,
192+ documentation for hooks is now dynamically generated from the
193+ present HookPoints. ``bzr hooks`` will now also report on all the
194+ hooks present in the ``bzrlib.hooks.known_hooks`` registry.
195+ (Robert Collins)
196+
197+ * ``bzr add`` no longer prints ``add completed`` on success. Failure
198+ still prints an error message. (Robert Collins)
199+
200+ * ``bzr branch`` now has a ``--no-tree`` option which turns off the
201+ generation of a working tree in the new branch.
202+ (Daniel Watkins, John Klinger, #273993)
203+
204+ * Bazaar will now point out ``bzr+ssh://`` to the user when they
205+ use ssh://. (Jelmer Vernooij, #330535)
206+
207+ * ``bzr -v info`` now omits the number of committers branch statistic,
208+ making it many times faster for large projects. To include that
209+ statistic in the output, use ``bzr -vv info``.
210+ (Ian Clatworthy)
211+
212+ * ``bzr push`` to a ``bzr`` url (``bzr://``, ``bzr+ssh://`` etc) will
213+ stream if the server is version 1.13 or greater, reducing roundtrips
214+ significantly. (Andrew Bennetts, Robert Collins)
215+
216+ * Lightweight Checkouts and Stacked Branches should both be much
217+ faster over remote connections. Building the working tree now
218+ batches up requests into approx 5MB requests, rather than a separate
219+ request for each file. (John Arbash Meinel)
220+
221+ * Support for GSSAPI authentication when using HTTP or HTTPS.
222+ (Jelmer Vernooij)
223+
224+ * The ``bzr shelve`` prompt now includes a '?' help option to explain the
225+ short options better. (Daniel Watkins, #327429)
226+
227+ * ``bzr lp-open`` now falls back to the push location if it cannot find a
228+ public location. (Jonathan Lange, #332372)
229+
230+ * ``bzr lp-open`` will try to find the Launchpad URL for the location
231+ passed on the command line. This makes ``bzr lp-open lp:foo`` work as
232+ expected. (Jonathan Lange, #332705)
233+
234+ * ``bzr send`` now supports MH-E via ``emacsclient``. (Eric Gillespie)
235+
236+ BUG FIXES:
237+
238+ * Bazaar now gives a better message including the filename if it's
239+ unable to read a file in the working directory, for example because
240+ of a permission error. (Martin Pool, #338653)
241+
242+ * ``bzr cat -r<old> <path>`` doesn't traceback anymore when <path> has a
243+ file id in the working tree different from the one in revision <old>.
244+ (Vincent Ladeuil, #341517, #253806)
245+
246+ * ``bzr send`` help is more specific about how to apply merge
247+ directives. (Neil Martinsen-Burrell, #253470)
248+
249+ * ``bzr missing`` now uses ``Repository.get_revision_delta()`` rather
250+ than fetching trees and determining a delta itself. (Jelmer
251+ Vernooij, #315048)
252+
253+ * ``bzr push`` to a smart server no longer causes "Revision
254+ {set([('null:',)])} not present ..." errors when the branch has
255+ multiple root revisions. (Andrew Bennetts, #317654)
256+
257+ * ``bzr shelve`` now properly handle patches with no terminating newline.
258+ (Benoît PIERRE, #303569)
259+
260+ * ``bzr unshelve`` gives a more palatable error if passed a non-integer
261+ shelf id. (Daniel Watkins)
262+
263+ * Export now handles files that are not present in the tree.
264+ (James Westby, #174539)
265+
266+ * Fixed incorrect "Source format does not support stacking" warning
267+ when pushing to a smart server. (Andrew Bennetts, #334114)
268+
269+ * Fixed "sprout() got an unexpected keyword argument 'source_branch'"
270+ error branching from old repositories.
271+ (Martin Pool, #321695)
272+
273+ * Make ``bzr push --quiet <non-local location>`` less chatty.
274+ (Kent Gibson, #221461)
275+
276+ * Many Branch hooks would not fire with ``bzr://`` and ``bzr+ssh://``
277+ branches, and this was not noticed due to a bug in the test logic
278+ for branches. This is now fixed and a test added to prevent it
279+ reoccuring. (Robert Collins, Andrew Bennetts)
280+
281+ * Restore the progress bar on Windows. We were disabling it when TERM
282+ wasn't set, but Windows doesn't set TERM. (Alexander Belchenko)
283+
284+ * ``setup.py build_ext`` now gives a proper error when an extension
285+ fails to build. (John Arbash Meinel)
286+
287+ * Symlinks to non ascii file names are now supported.
288+ (Robert Collins, Vincent Ladeuil, #339055, #272444)
289+
290+ * Under rare circumstances (aka nobody reported a bug about it), the ftp
291+ transport could revert to ascii mode. It now stays in binary mode except
292+ when needed.
293+ (Vincent Ladeuil)
294+
295+ * Unshelve does not generate warnings about progress bars.
296+ (Aaron Bentley, #328148)
297+
298+ * shelve cleans up properly when unversioned files are specified.
299+ (Benoît Pierre, Aaron Bentley)
300+
301+ DOCUMENTATION:
302+
303+ * Added ``Organizing your workspace`` to the User Guide appendices,
304+ summarizing some common ways of organizing trees, branches and
305+ repositories and the processes/workflows implied/enabled by each.
306+ (Ian Clatworthy)
307+
308+ * Hooks can now be self documenting. ``bzrlib.hooks.Hooks.create_hook``
309+ is the entry point for this feature. (Robert Collins)
310+
311+ * The documentation for ``shelve`` and ``unshelve`` has been clarified.
312+ (Daniel Watkins, #327421, #327425)
313+
314+ API CHANGES:
315+
316+ * ``bzr selftest`` now fails if the bazaar sources contain trailing
317+ whitespace, non-unix style line endings and files not ending in a
318+ newline. About 372 files and 3243 lines with trailing whitespace was
319+ updated to comply with this. The code already complied with the other
320+ criteria, but now it is enforced. (Marius Kruger)
321+
322+ ``bzrlib.branch.PushResult`` was renamed to
323+ ``bzrlib.branch.BranchPushResult``. (Jelmer Vernooij)
324+
325+ * ``Branch.fetch`` and ``Repository.fetch`` now return None rather
326+ than a count of copied revisions and failed revisions. A while back
327+ we stopped ever reporting failed revisions because we started
328+ erroring instead, and the copied revisions count is not used in the
329+ UI at all - indeed it only reflects the repository status not
330+ changes to the branch itself. (Robert Collins)
331+
332+ * ``Inventory.apply_delta`` now raises an AssertionError if a file-id
333+ appears multiple times within the delta. (Ian Clatworthy)
334+
335+ * MutableTree.commit now favours the "authors" argument, with the old
336+ "author" argument being deprecated.
337+
338+ * Remove deprecated EmptyTree. (Martin Pool)
339+
340+ * ``Repository.fetch`` now accepts an optional ``fetch_spec``
341+ parameter. A ``SearchResult`` or ``MiniSearchResult`` may be passed
342+ to ``fetch_spec`` instead of a ``last_revision`` to specify exactly
343+ which revisions to fetch. (Andrew Bennetts)
344+
345+ * ``RepositoryAcquisitionPolicy.acquire_repository`` now returns a
346+ tuple of ``(repository, is_new_flag)``, rather than just the
347+ repository. (Andrew Bennetts)
348+
349+ * Revision.get_apparent_author() is now deprecated, replaced by
350+ Revision.get_apparent_authors(), which returns a list. The former
351+ now returns the first item that would be returned from the second.
352+
353+ * The ``BranchBuilder`` test helper now accepts a ``timestamp``
354+ parameter to ``build_commit`` and ``build_snapshot``. (Martin Pool)
355+
356+ * The ``_fetch_*`` attributes on ``Repository`` are now on
357+ ``RepositoryFormat``, more accurately reflecting their intent (they
358+ describe a disk format capability, not state of a particular
359+ repository of that format). (Robert Collins)
360+
361+ INTERNALS:
362+
363+ * Branching from a non-stacked branch on a smart protocol is now
364+ free of virtual file system methods.
365+ (Robert Collins, Andrew Bennetts)
366+
367+ * Branch and Repository creation on a bzr+ssh://server are now done
368+ via RPC calls rather than VFS calls, reducing round trips for
369+ pushing new branches substantially. (Robert Collins)
370+
371+ * ``Branch.clone`` now takes the ``repository_policy`` formerly used
372+ inside ``BzrDir.clone_on_transport``, allowing stacking to be
373+ configured before the branch tags and revision tip are set. This
374+ fixes a race condition cloning stacked branches that would cause
375+ plugins to have hooks called on non-stacked instances.
376+ (Robert Collins, #334187)
377+
378+ * ``BzrDir.cloning_metadir`` now has a RPC call. (Robert Collins)
379+
380+ * ``BzrDirFormat.__str__`` now uses the human readable description
381+ rather than the sometimes-absent disk label. (Robert Collins)
382+
383+ * ``bzrlib.fetch`` is now composed of a sender and a sink component
384+ allowing for decoupling over a network connection. Fetching from
385+ or into a RemoteRepository with a 1.13 server will use this to
386+ stream the operation.
387+ (Andrew Bennetts, Robert Collins)
388+
389+ * ``bzrlib.tests.run_suite`` accepts a runner_class parameter
390+ supporting the use of different runners. (Robert Collins)
391+
392+ * Change how file_ids and revision_ids are interned as part of
393+ inventory deserialization. Now we use the real ``intern()``, rather
394+ than our own workaround that would also cache a Unicode copy of the
395+ string, and never emptied the cache. This should slightly reduce
396+ memory consumption. (John Arbash Meinel)
397+
398+ * New branch method ``create_clone_on_transport`` that returns a
399+ branch object. (Robert Collins)
400+
401+ * New hook Commands['extend_command'] to allow plugins to access a
402+ command object before the command is run (or help generated from
403+ it), without overriding the command. (Robert Collins)
404+
405+ * New version of the ``BzrDir.find_repository`` verb supporting
406+ ``_network_name`` to support removing more _ensure_real calls.
407+ (Robert Collins)
408+
409+ * ``RemoteBranchFormat`` no longer claims to have a disk format string.
410+ (Robert Collins)
411+
412+ * ``Repository`` objects now have ``suspend_write_group`` and
413+ ``resume_write_group`` methods. These are currently only useful
414+ with pack repositories. (Andrew Bennetts, Robert Collins)
415+
416+ * ``BzrDirFormat``, ``BranchFormat`` and ``RepositoryFormat`` objects
417+ now have a ``network_name`` for passing the format across RPC calls.
418+ (Robert Collins, Andrew Bennetts)
419+
420+ * ``RepositoryFormat`` objects now all have a new attribute
421+ ``_serializer`` used by fetch when reserialising is required.
422+ (Robert Collins, Andrew Bennetts)
423+
424+ * Some methods have been pulled up from ``BzrBranch`` to ``Branch``
425+ to aid branch types that are not bzr branch objects (like
426+ RemoteBranch). (Robert Collins, Andrew Bennetts)
427+
428+ * Test adaptation has been made consistent throughout the built in
429+ tests. ``TestScenarioApplier``, ``multiply_tests_from_modules``,
430+ ``adapt_tests``, ``adapt_modules`` have all been deleted. Please
431+ use ``multiply_tests``, or for lower level needs ``apply_scenarios``
432+ and ``apply_scenario``. (Robert Collins)
433+
434+ * ``TestSkipped`` is now detected by TestCase and passed to the
435+ ``TestResult`` by calling ``addSkip``. For older TestResult objects,
436+ where ``addSkip`` is not available, ``addError`` is still called.
437+ This permits test filtering in subunit to strip out skipped tests
438+ resulting in a faster fix-shrink-list-run cycle. This is compatible
439+ with the testtools protocol for skips. (Robert Collins)
440+
441+ * The ``_index`` of ``KnitVersionedFiles`` now supports the ability
442+ to scan an underlying index that is going to be incorporated into
443+ the ``KnitVersionedFiles`` object, to determine if it has missing
444+ delta references. The method is ``scan_unvalidated_index``.
445+ (Andrew Bennetts, Robert Collins)
446+
447+ * There is a RemoteSink object which handles pushing to smart servers.
448+ (Andrew Bennetts, Robert Collins)
449+
450+ * ``TransportTraceDecorator`` now logs ``put_bytes_non_atomic`` and
451+ ``rmdir`` calls. (Robert Collins)
452+
453+ * ``VersionedFiles`` record adapters have had their signature change
454+ from ``(record, record.get_bytes_as(record.storage_kind))`` to
455+ ``(record)`` reducing excess duplication and allowing adapters
456+ to access private data in record to obtain content more
457+ efficiently. (Robert Collins)
458+
459+ * We no longer probe to see if we should create a working tree during
460+ clone if we cannot get a local_abspath for the new bzrdir.
461+ (Robert Collins)
462+
463+
464+bzr 1.12 "1234567890" 2009-02-13
465+--------------------------------
466+>>>>>>> MERGE-SOURCE
467
468 This release of Bazaar contains many improvements to the speed,
469 documentation and functionality of ``bzr log`` and the display of logged
470
471=== modified file 'bzrlib/osutils.py'
472--- bzrlib/osutils.py 2010-06-18 10:57:20 +0000
473+++ bzrlib/osutils.py 2010-06-24 20:53:32 +0000
474@@ -1128,6 +1128,14 @@
475 else:
476 return False
477
478+def samefile(f1, f2):
479+ """ Just a patch for os.path.samefile which would probably be more helpful
480+ if it existed and did this on Windows...
481+ """
482+ try:
483+ return os.path.samefile(f1, f2)
484+ except (AttributeError, OSError):
485+ return f1 == f2
486
487 def relpath(base, path):
488 """Return path relative to base, or raise PathNotChild exception.
489@@ -1152,14 +1160,25 @@
490
491 s = []
492 head = rp
493+<<<<<<< TREE
494 while True:
495 if len(head) <= len(base) and head != base:
496 raise errors.PathNotChild(rp, base)
497 if head == base:
498 break
499 head, tail = split(head)
500+=======
501+ while not samefile(head, base):
502+ head, tail = os.path.split(head)
503+>>>>>>> MERGE-SOURCE
504 if tail:
505+<<<<<<< TREE
506 s.append(tail)
507+=======
508+ s.insert(0, tail)
509+ else:
510+ raise errors.PathNotChild(rp, base)
511+>>>>>>> MERGE-SOURCE
512
513 if s:
514 return pathjoin(*reversed(s))
515
516=== modified file 'bzrlib/tests/blackbox/test_add.py'
517--- bzrlib/tests/blackbox/test_add.py 2010-02-23 07:43:11 +0000
518+++ bzrlib/tests/blackbox/test_add.py 2010-06-24 20:53:32 +0000
519@@ -19,6 +19,7 @@
520
521 import os
522
523+<<<<<<< TREE
524 from bzrlib import (
525 osutils,
526 tests,
527@@ -41,6 +42,14 @@
528 def make_branch_and_tree(self, dir):
529 return super(TestAdd, self).make_branch_and_tree(
530 dir, format=self.branch_tree_format)
531+=======
532+from bzrlib.tests.blackbox import ExternalBase
533+from bzrlib.tests.test_win32utils import NeedsGlobExpansionFeature
534+from bzrlib.tests import TestNotApplicable
535+
536+
537+class TestAdd(ExternalBase):
538+>>>>>>> MERGE-SOURCE
539
540 def test_add_reports(self):
541 """add command prints the names of added files."""
542@@ -211,9 +220,29 @@
543 out = self.run_bzr(['add', 'link/top.txt'])[0]
544 self.assertEquals(out, 'adding top.txt\n')
545
546+<<<<<<< TREE
547 def test_add_symlink_to_abspath(self):
548 self.requireFeature(tests.SymlinkFeature)
549 self.make_branch_and_tree('tree')
550 os.symlink(osutils.abspath('target'), 'tree/link')
551 out = self.run_bzr(['add', 'tree/link'])[0]
552 self.assertEquals(out, 'adding link\n')
553+=======
554+ def test_add_with_wildcards_unicode(self):
555+ self.requireFeature(NeedsGlobExpansionFeature)
556+ self.make_branch_and_tree('.')
557+ self.build_tree([u'\u1234A', u'\u1235A', u'\u1235AA', 'cc'])
558+ self.run_bzr(['add', u'\u1234?', u'\u1235*'])
559+ self.assertEquals(self.run_bzr('unknowns')[0], 'cc\n')
560+
561+ def test_add_with_symlink(self):
562+ if not hasattr(os, "symlink"):
563+ raise TestNotApplicable("Symbolic links not present")
564+
565+ self.make_branch_and_tree('source')
566+ self.build_tree(['source/top.txt'])
567+ os.symlink('source', 'link')
568+ out = self.run_bzr(['add', 'link/top.txt'])[0]
569+ self.assertEquals(out, 'adding top.txt\n')
570+
571+>>>>>>> MERGE-SOURCE