Comment 2 for bug 82603

Revision history for this message
Phil Frost (bitglue) wrote :

# I have a very similar problem:

~/bzrtest $ bzr init-repo --no-trees repository
~/bzrtest $ bzr init repository/dev
~/bzrtest $ bzr checkout --lightweight repository/dev/
~/bzrtest $ cd dev
~/bzrtest/dev $ touch one
~/bzrtest/dev $ bzr add one
added one
~/bzrtest/dev $ bzr ci -m 'added one'
added one
Committed revision 1.
~/bzrtest/dev $ cd ../repository/dev/
~/bzrtest/repository/dev $ bzr push ../../imagine_this_is_a_remote_server
Created new branch.
~/bzrtest/repository/dev $ bzr bind ../../imagine_this_is_a_remote_server/

# at this point, the situation is this:
# ./repository -- a --no-trees repository
# ./repository/dev -- a branch in that repo
# ./dev -- a lightweight checkout of ./repository/dev
# ./imagine_this_is_a_remote_server -- a mirror of the dev branch.
# ./repository/dev is bound to this. My understanding is that this is
# identical to ./repository/dev being a "checkout" of
# ./imagine_this_is_a_remote_server; the only difference being the way it was
# created.

# now, let's see what info will tell us. First, ./repository/dev. What's odd
# about this output is that it doesn't say that it is bound to
# imagine_this_is_a_remote_server.

~/bzrtest/repository/dev $ bzr info
Repository bound branch (format: dirstate or knit)
Location:
  shared repository: file:///Users/pfrost/bzrtest/repository/
  repository branch: dev

Related branches:
  publish to branch: file:///Users/pfrost/bzrtest/imagine_this_is_a_remote_server/

# next, ./dev, the leightweight checkout. What's odd here is that it *does* say
# that ./dev is a checkout of ./imagine_this_is_a_remote_server, but it's not!
# It's a checkout of ./repository/dev/ in my mind.
#
# I think the issue here may be overloading definitions of the word "checkout".
# From what I gather in IRC, there are two types of relationships involved.
# One, a working directory is always associated to exactly one branch. Two, a
# branch may be "bound" with "bzr bind" to another branch, the semantics being
# that any commits to one branch are applied to the other branch.
#
# A confusing problem is that one of these relationships is called a
# "lightweight checkout" (and then, only when the working tree and branch
# happen to be in different directories) and the other is a "heavyweight
# checkout". This implies a "checkout" is either "heavy" or "light", but in
# fact it can be both. If a branch is bound to another, but doesn't have a
# working tree in the same directory, is it still a checkout?

~/bzrtest/repository/dev $ cd ../../dev
~/bzrtest/dev $ bzr info
Lightweight checkout (format: dirstate or dirstate-tags)
Location:
       light checkout root: file:///Users/pfrost/bzrtest/dev/
  repository checkout root: file:///Users/pfrost/bzrtest/repository/dev/
        checkout of branch: file:///Users/pfrost/bzrtest/imagine_this_is_a_remote_server/
         shared repository: file:///Users/pfrost/bzrtest/repository/

Related branches:
  publish to branch: file:///Users/pfrost/bzrtest/imagine_this_is_a_remote_server/

# finally add a file and check that all three places pick it up. I had to
# check, because I wasn't sure if ./repository/dev really was bound to
# imagine_this_is_a_remote_server.

~/bzrtest/dev $ touch two
~/bzrtest/dev $ bzr add two
added two
~/bzrtest/dev $ bzr ci -m 'added two'
added two
Committed revision 2.
~/bzrtest/dev $ cd ..
~/bzrtest $ bzr log --short dev
    2 Phil Frost 2007-07-19
      added two

    1 Phil Frost 2007-07-19
      added one

~/bzrtest $ bzr log --short repository/dev/
    2 Phil Frost 2007-07-19
      added two

    1 Phil Frost 2007-07-19
      added one

~/bzrtest $ bzr log --short imagine_this_is_a_remote_server/
    2 Phil Frost 2007-07-19
      added two

    1 Phil Frost 2007-07-19
      added one

~/bzrtest $