From: Stephen Leake <stephen_leake@stephe-leake.org>
To: git@vger.kernel.org
Subject: Determining update/merge/current state of a workspace
Date: Sun, 02 Feb 2014 16:15:09 -0600 [thread overview]
Message-ID: <85ppn540wi.fsf@stephe-leake.org> (raw)
I'm working on the DVC Emacs front-end for git
(http://www.emacswiki.org/emacs/DistributedVersionControl), adding
features similar to the ones I added for monotone
(http://www.monotone.ca). I'm used to monotone and new to git, so this
may seem like an odd workflow.
I always do 'fetch' and 'merge' separately, never 'pull'. So after a
'fetch', the DVC Emacs front end must determine what needs to happen
next. I think there are three cases:
1) 'fetch' did not retrieve any revisions from remote; the last local
commit is the head of the branch.
The workspace is up to date (it may need to be comitted).
2) 'fetch' retrieved revisions, and there were no local commits since
the previous fetch.
The last fetch is the head of the branch; if not equal to HEAD, the
workspace needs to be updated (via 'merge').
3) fetch retrieved revisions, and there were local commits since
the previous fetch.
There are two heads for the branch (the two described above), they
need to be merged, then the workspace updated.
I'm not sure how 'git fetch' handles case 3); I have not tested that
case yet.
The question I have is:
What git queries can I run to determine which of the three states the
current workspace is in?
'rev-parse HEAD' gives the last workspace commit.
'rev-parse refs/remotes/<remote>/<branch>' gives the head of the branch
in the remote repository as of the most recent fetch.
But to distinguish among the cases, I need to determine if one of these
two revs is a child of the other or not. I don't see a git query to
determine that directly.
I could try parsing a 'log' output; I have not investigated that.
This is easy in monotone; there is a command 'mtn heads' that gives this
result directly (it returns either one or two revs), and another command
'mtn automate toposort' that orders revs topologically (by parent/child
relationships).
--
-- Stephe
next reply other threads:[~2014-02-02 22:15 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-02 22:15 Stephen Leake [this message]
2014-02-02 22:44 ` Determining update/merge/current state of a workspace Jeff King
2014-02-02 23:04 ` David Aguilar
2014-02-03 0:50 ` brian m. carlson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=85ppn540wi.fsf@stephe-leake.org \
--to=stephen_leake@stephe-leake.org \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).