[PATCH 5 of 6 OBSOLETE-MARKERS] obsolete: add proper metadata handling to obsolete marker: user and date
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Sat May 12 12:08:53 CDT 2012
# HG changeset patch
# User Pierre-Yves.David at ens-lyon.org
# Date 1336840751 -7200
# Node ID 09943a88d99a60e597ba7c3828612c7bec43e370
# Parent 0d39a100bf11a38b76abdc79b307c3518bd08efd
obsolete: add proper metadata handling to obsolete marker: user and date
We add "date" and "user" data. It's currently accessed very barely. metadata
will be more wrapper "later".
"date" are expected to help with garbage collection.
"user" are expected to help to solve conflicting situation.
encode and decode extra are kept in changelog because I'm not sure we want use
them as is for now.
diff -r 0d39a100bf11 -r 09943a88d99a mercurial/cmdutil.py
--- a/mercurial/cmdutil.py Sat May 12 17:41:33 2012 +0200
+++ b/mercurial/cmdutil.py Sat May 12 18:39:11 2012 +0200
@@ -10,7 +10,7 @@
import os, sys, errno, re, tempfile
import util, scmutil, templater, patch, error, templatekw, revlog, copies
import match as matchmod
-import subrepo, context, repair, bookmarks
+import subrepo, context, repair, bookmarks, changelog
def parsealiases(cmd):
return cmd.lstrip("^").split("|")
@@ -698,8 +698,23 @@
for parent in parents:
self.ui.write(_("parent: %d:%s\n") % parent,
label='log.parent')
- if ctx.obsolete():
+ if util.safehasattr(ctx, 'obsolete') and ctx.obsolete():
self.ui.write(_("obsolete: dead\n"))
+ if self.ui.debug:
+ for marker in self.repo.obsstore.obsoleted[ctx.node()]:
+ if marker[1]: # if replacement
+ msg = "replaced: %s by %s\n"
+ else:
+ msg = "killed: %s by %s\n"
+ metadata = changelog.decodeextra(marker[3])
+ odate = metadata['date'].split(' ')
+ odate = (float(odate[0]), int(odate[1]))
+ odate = util.datestr(odate)
+ self.ui.debug(msg % (odate, metadata['user']))
+ repls = marker[1]
+ for rpn in repls:
+ rp = self.repo[rpn]
+ self.ui.note(_(" by: %d:%s\n") % (rp, rp))
if self.ui.debugflag:
mnode = ctx.manifestnode()
diff -r 0d39a100bf11 -r 09943a88d99a mercurial/commands.py
--- a/mercurial/commands.py Sat May 12 17:41:33 2012 +0200
+++ b/mercurial/commands.py Sat May 12 18:39:11 2012 +0200
@@ -18,6 +18,7 @@
import dagparser, context, simplemerge
import random, setdiscovery, treediscovery, dagutil, pvec
import phases
+import changelog
table = {}
@@ -4172,7 +4173,7 @@
@command('obsolete',
[('r', 'rev', [], _('mark given revision as obsolete'), _('REV')),
- ],
+ ] + commitopts2,
_('[--rev] REV'))
def obsolete(ui, repo, *revs, **opts):
"""mark a changeset as obsolete (DEPRECATED)"""
@@ -4182,10 +4183,19 @@
if not revs:
raise util.Abort(_('no revisions specified'))
+ metadata = {}
+ metadata['date'] = opts['date'] or '%f %i' % util.makedate()
+ try:
+ metadata['user'] = opts['user'] or ui.username()
+ except util.Abort, e:
+ ui.write(" %s\n" % e)
+ ui.write(_(" (specify a username in your configuration file)\n"))
+ metadata = changelog.encodeextra(metadata)
+
l = repo.lock()
try:
for obs in revs:
- marker = (repo[obs].node(), (), 0, '')
+ marker = (repo[obs].node(), (), 0, metadata)
repo.obsstore.add(marker)
finally:
l.release()
diff -r 0d39a100bf11 -r 09943a88d99a tests/test-debugcomplete.t
--- a/tests/test-debugcomplete.t Sat May 12 17:41:33 2012 +0200
+++ b/tests/test-debugcomplete.t Sat May 12 18:39:11 2012 +0200
@@ -257,7 +257,7 @@
incoming: force, newest-first, bundle, rev, bookmarks, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, insecure, subrepos
locate: rev, print0, fullpath, include, exclude
manifest: rev, all
- obsolete: rev
+ obsolete: rev, date, user
outgoing: force, rev, newest-first, bookmarks, branch, patch, git, limit, no-merges, stat, style, template, ssh, remotecmd, insecure, subrepos
parents: rev, style, template
paths:
diff -r 0d39a100bf11 -r 09943a88d99a tests/test-obsolete.t
--- a/tests/test-obsolete.t Sat May 12 17:41:33 2012 +0200
+++ b/tests/test-obsolete.t Sat May 12 18:39:11 2012 +0200
@@ -14,7 +14,7 @@
$ hg obsolete
abort: no revisions specified
[255]
- $ hg obsolete "desc('kill_me')"
+ $ hg obsolete -d '0 0' "desc('kill_me')" -u babar
$ hg log -r .
changeset: 0:97b7c2d76b18
tag: tip
@@ -23,3 +23,20 @@
date: Thu Jan 01 00:00:00 1970 +0000
summary: add kill_me
+ $ hg log --debug -r .
+ changeset: 0:97b7c2d76b1845ed3eb988cd612611e72406cef0
+ tag: tip
+ phase: draft
+ parent: -1:0000000000000000000000000000000000000000
+ parent: -1:0000000000000000000000000000000000000000
+ obsolete: dead
+ killed: Thu Jan 01 00:00:00 1970 +0000 by babar
+ manifest: 0:e0118fdce072635517f5b720b93e0afb30ea7a29
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ files+: kill_me
+ extra: branch=default
+ description:
+ add kill_me
+
+
More information about the Mercurial-devel
mailing list