* [PATCH] checkout: allow full refnames for local branches @ 2007-05-09 8:40 Lars Hjemli 2007-05-09 8:48 ` Junio C Hamano 0 siblings, 1 reply; 9+ messages in thread From: Lars Hjemli @ 2007-05-09 8:40 UTC (permalink / raw) To: git; +Cc: Junio C Hamano This teaches git-checkout to strip the prefix 'refs/heads/' from the supplied <branch> argument, to make git-checkout refs/heads/master behave like git-checkout master The former command would detach HEAD. Signed-off-by: Lars Hjemli <hjemli@gmail.com> --- I'm undecided on wheter this is a bugfix or a new feature. It certainly introduces new behaviour, but it passes all the tests. git-checkout.sh | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/git-checkout.sh b/git-checkout.sh index ed7c2c5..6ff7b6e 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -63,6 +63,7 @@ while [ "$#" != "0" ]; do echo "unknown flag $arg" exit 1 fi + arg=$(echo "$arg" | sed -e "s|^refs/heads/||") new="$rev" new_name="$arg" if git-show-ref --verify --quiet -- "refs/heads/$arg" -- 1.5.2.rc2.21.g3082a ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 8:40 [PATCH] checkout: allow full refnames for local branches Lars Hjemli @ 2007-05-09 8:48 ` Junio C Hamano 2007-05-09 9:07 ` Lars Hjemli 0 siblings, 1 reply; 9+ messages in thread From: Junio C Hamano @ 2007-05-09 8:48 UTC (permalink / raw) To: Lars Hjemli; +Cc: git Lars Hjemli <hjemli@gmail.com> writes: > This teaches git-checkout to strip the prefix 'refs/heads/' from the > supplied <branch> argument, to make > > git-checkout refs/heads/master > > behave like > > git-checkout master > > The former command would detach HEAD. > > Signed-off-by: Lars Hjemli <hjemli@gmail.com> > --- > > I'm undecided on wheter this is a bugfix or a new feature. It certainly > introduces new behaviour, but it passes all the tests. Why is this necessary, may I ask? ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 8:48 ` Junio C Hamano @ 2007-05-09 9:07 ` Lars Hjemli 2007-05-09 18:54 ` Shawn O. Pearce 2007-05-09 19:37 ` Junio C Hamano 0 siblings, 2 replies; 9+ messages in thread From: Lars Hjemli @ 2007-05-09 9:07 UTC (permalink / raw) To: Junio C Hamano; +Cc: git On 5/9/07, Junio C Hamano <junkio@cox.net> wrote: > Lars Hjemli <hjemli@gmail.com> writes: > > > This teaches git-checkout to strip the prefix 'refs/heads/' from the > > supplied <branch> argument > > Why is this necessary, may I ask? > I'm playing around with a gui frontend, and there I use git-for-each-ref to obtain possible arguments for git-checkout. That's how I discovered the 'problem', and solved it by stripping 'refs/heads/' in my frontend. But then I thought it would be nice if 'git-checkout' did the stripping on my behalf, since this might bite others too :) -- larsh ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 9:07 ` Lars Hjemli @ 2007-05-09 18:54 ` Shawn O. Pearce 2007-05-09 20:01 ` Lars Hjemli 2007-05-09 19:37 ` Junio C Hamano 1 sibling, 1 reply; 9+ messages in thread From: Shawn O. Pearce @ 2007-05-09 18:54 UTC (permalink / raw) To: Lars Hjemli; +Cc: Junio C Hamano, git Lars Hjemli <hjemli@gmail.com> wrote: > I'm playing around with a gui frontend, and there I use > git-for-each-ref to obtain possible arguments for git-checkout. That's > how I discovered the 'problem', and solved it by stripping > 'refs/heads/' in my frontend. But then I thought it would be nice if > 'git-checkout' did the stripping on my behalf, since this might bite > others too :) If you are building "porcelain" to sit over Git and offer up a pretty view of things, I would encourage you to avoid the stock porcelain. Don't use git-checkout, its stock porcelain. Instead go right to the plumbing. The plumbing doesn't really change behavior as often (if ever). You can see in git-checkout.sh what actions you need to perform, but its really quite simple if there's no file-level merge involved. Here's the relevent bits from git-gui: set cmd [list git read-tree] lappend cmd -m lappend cmd -u lappend cmd --exclude-per-directory=.gitignore lappend cmd $HEAD lappend cmd $new_branch set fd_rt [open "| $cmd" r] fconfigure $fd_rt -blocking 0 -translation binary fileevent $fd_rt readable \ [list switch_branch_readtree_wait $fd_rt $new_branch] ... git symbolic-ref HEAD "refs/heads/$new_branch" Really all I'm doing is building up an argument list for git read-tree, passing it the commit that is currently in HEAD and the commit I want to switch to ($new_branch), and then I wait for it to finish its job. When its done, I run git symbolic-ref to update the current branch name. -- Shawn. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 18:54 ` Shawn O. Pearce @ 2007-05-09 20:01 ` Lars Hjemli 2007-05-09 20:11 ` Shawn O. Pearce 0 siblings, 1 reply; 9+ messages in thread From: Lars Hjemli @ 2007-05-09 20:01 UTC (permalink / raw) To: Shawn O. Pearce; +Cc: Junio C Hamano, git On 5/9/07, Shawn O. Pearce <spearce@spearce.org> wrote: > Lars Hjemli <hjemli@gmail.com> wrote: > > I'm playing around with a gui frontend, and there I use > > git-for-each-ref to obtain possible arguments for git-checkout. That's > > how I discovered the 'problem', and solved it by stripping > > 'refs/heads/' in my frontend. But then I thought it would be nice if > > 'git-checkout' did the stripping on my behalf, since this might bite > > others too :) > > If you are building "porcelain" to sit over Git and offer up a pretty > view of things, I would encourage you to avoid the stock porcelain. > Don't use git-checkout, its stock porcelain. Instead go right to > the plumbing. The plumbing doesn't really change behavior as often > (if ever). Thanks, I probably will (also to avoid the shell scripts, since my porcelain is aimed at my co-workers who are stuck on windows) -- larsh ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 20:01 ` Lars Hjemli @ 2007-05-09 20:11 ` Shawn O. Pearce 2007-05-09 20:38 ` Lars Hjemli 0 siblings, 1 reply; 9+ messages in thread From: Shawn O. Pearce @ 2007-05-09 20:11 UTC (permalink / raw) To: Lars Hjemli; +Cc: Junio C Hamano, git Lars Hjemli <hjemli@gmail.com> wrote: > On 5/9/07, Shawn O. Pearce <spearce@spearce.org> wrote: > >If you are building "porcelain" to sit over Git and offer up a pretty > >view of things, I would encourage you to avoid the stock porcelain. > >Don't use git-checkout, its stock porcelain. Instead go right to > >the plumbing. The plumbing doesn't really change behavior as often > >(if ever). > > Thanks, I probably will (also to avoid the shell scripts, since my > porcelain is aimed at my co-workers who are stuck on windows) Are you building a strictly Win32 native GUI? Or something else? Can I ask what sort of features you are going after? (And if there's a git repository available, feel free to just point me at it and ignore my questions.) I'm just curious. We seem to have a lot of user interface projects going on at once right now (Eclipse plugin, git-gui, gitk, qgit, tig, gitweb, blameview) and everyone's been learning from each other. I think the competition is good, there's no clear right way to do things here. As the primary author of git-gui, I do want to try and keep current with what the others are up to. ;-) -- Shawn. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 20:11 ` Shawn O. Pearce @ 2007-05-09 20:38 ` Lars Hjemli 0 siblings, 0 replies; 9+ messages in thread From: Lars Hjemli @ 2007-05-09 20:38 UTC (permalink / raw) To: Shawn O. Pearce; +Cc: Junio C Hamano, git On 5/9/07, Shawn O. Pearce <spearce@spearce.org> wrote: > Lars Hjemli <hjemli@gmail.com> wrote: > > On 5/9/07, Shawn O. Pearce <spearce@spearce.org> wrote: > > >If you are building "porcelain" to sit over Git and offer up a pretty > > >view of things, I would encourage you to avoid the stock porcelain. > > >Don't use git-checkout, its stock porcelain. Instead go right to > > >the plumbing. The plumbing doesn't really change behavior as often > > >(if ever). > > > > Thanks, I probably will (also to avoid the shell scripts, since my > > porcelain is aimed at my co-workers who are stuck on windows) > > Are you building a strictly Win32 native GUI? Or something else? It's mono/.net, so I can test it on my linux box and push the binary directly to the poor souls on windows :) > Can I ask what sort of features you are going after? (And if > there's a git repository available, feel free to just point me at > it and ignore my questions.) The features I'm focusing on are mostly trivial day-to-day operations of your average coder: status, diff, commit, push, fetch, merge, checkout, log. This should be enough to support our (planned) workflow of one public repo per developer + a shared integration repo with restricted push access + active use of topic-branches. We currently use subversion, so real branches + real merges are killer arguments for a switch to git. But we also use tortoisesvn, and the "simplicity" of the gui must be met by some tool. Hence me playing around.... If/when it becomes useful, I'll put it up on http://hjemli.net/git/ > I'm just curious. We seem to have a lot of user interface projects > going on at once right now (Eclipse plugin, git-gui, gitk, qgit, tig, > gitweb, blameview) and everyone's been learning from each other. Heh, I actually considered calling it yagg (but it doesn't deserve a name yet) > I think the competition is good, there's no clear right way to do > things here. As the primary author of git-gui, I do want to try > and keep current with what the others are up to. ;-) Absolutely, nice work btw. -- larsh ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 9:07 ` Lars Hjemli 2007-05-09 18:54 ` Shawn O. Pearce @ 2007-05-09 19:37 ` Junio C Hamano 2007-05-09 19:55 ` Lars Hjemli 1 sibling, 1 reply; 9+ messages in thread From: Junio C Hamano @ 2007-05-09 19:37 UTC (permalink / raw) To: Lars Hjemli; +Cc: git "Lars Hjemli" <hjemli@gmail.com> writes: > On 5/9/07, Junio C Hamano <junkio@cox.net> wrote: >> Lars Hjemli <hjemli@gmail.com> writes: >> >> > This teaches git-checkout to strip the prefix 'refs/heads/' from the >> > supplied <branch> argument >> >> Why is this necessary, may I ask? >> > > I'm playing around with a gui frontend, and there I use > git-for-each-ref to obtain possible arguments for git-checkout. That's > how I discovered the 'problem', and solved it by stripping > 'refs/heads/' in my frontend. Pathspec-less variant of "git checkout" takes two kinds of parameters and has two flavours in its behaviour: (1) an exact branch name, in which case it switches to the branch; otherwise (2) any arbitrary commit object name, in whch case it checks out and detaches HEAD. A tricky part is that an exact branch name is often a perfectly valid commit object name, so rule (1) trumps the rule (2). You just discovered a way to have a detached HEAD at a commit that happens to be at an existing branch -- by naming that commit without using its exact branch name. An easier way to spell that would be: $ git checkout master^0 but master^0 heads/master refs/heads/master are all perfectly good ways to talk about the commit at the tip of the 'master' branch without spelling it as an exact branch name (which is 'master'). ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH] checkout: allow full refnames for local branches 2007-05-09 19:37 ` Junio C Hamano @ 2007-05-09 19:55 ` Lars Hjemli 0 siblings, 0 replies; 9+ messages in thread From: Lars Hjemli @ 2007-05-09 19:55 UTC (permalink / raw) To: Junio C Hamano; +Cc: git On 5/9/07, Junio C Hamano <junkio@cox.net> wrote: > "Lars Hjemli" <hjemli@gmail.com> writes: > > > On 5/9/07, Junio C Hamano <junkio@cox.net> wrote: > >> Lars Hjemli <hjemli@gmail.com> writes: > >> > >> > This teaches git-checkout to strip the prefix 'refs/heads/' from the > >> > supplied <branch> argument > >> > >> Why is this necessary, may I ask? > >> > > > > I'm playing around with a gui frontend, and there I use > > git-for-each-ref to obtain possible arguments for git-checkout. That's > > how I discovered the 'problem', and solved it by stripping > > 'refs/heads/' in my frontend. > > Pathspec-less variant of "git checkout" takes two kinds of > parameters and has two flavours in its behaviour: > > (1) an exact branch name, in which case it switches to the > branch; otherwise > > (2) any arbitrary commit object name, in whch case it checks > out and detaches HEAD. > > A tricky part is that an exact branch name is often a perfectly > valid commit object name, so rule (1) trumps the rule (2). You > just discovered a way to have a detached HEAD at a commit that > happens to be at an existing branch -- by naming that commit > without using its exact branch name. Ok. But if this is intended behaviour, maybe we would want do change the detach-message in this case: [~/src/git] next$ git checkout refs/heads/master Note: moving to "refs/heads/master" which isn't a local branch (sorry for stealing your time with this unimportant stuff, it just surprised me that refs/heads/$branch wasn't treated as a local branch name) -- larsh ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-05-09 20:38 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-05-09 8:40 [PATCH] checkout: allow full refnames for local branches Lars Hjemli 2007-05-09 8:48 ` Junio C Hamano 2007-05-09 9:07 ` Lars Hjemli 2007-05-09 18:54 ` Shawn O. Pearce 2007-05-09 20:01 ` Lars Hjemli 2007-05-09 20:11 ` Shawn O. Pearce 2007-05-09 20:38 ` Lars Hjemli 2007-05-09 19:37 ` Junio C Hamano 2007-05-09 19:55 ` Lars Hjemli
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).