mercurial/commands.py
changeset 349 b2293093b89e
parent 347 a0b2758edee7
parent 340 97a897d32dfc
child 350 b4e0e20646bb
equal deleted inserted replaced
348:442eb02cf870 349:b2293093b89e
   124             ui.status("\n\n")
   124             ui.status("\n\n")
   125         else:
   125         else:
   126             ui.status("summary:     %s\n" % description.splitlines()[0])
   126             ui.status("summary:     %s\n" % description.splitlines()[0])
   127     ui.status("\n")
   127     ui.status("\n")
   128 
   128 
       
   129 def tags_load(repo):
       
   130     repo.lookup(0) # prime the cache
       
   131     i = repo.tags.items()
       
   132     n = []
       
   133     for e in i:
       
   134         try:
       
   135             l = repo.changelog.rev(e[1])
       
   136         except KeyError:
       
   137             l = -2
       
   138         n.append((l, e))
       
   139     return n
       
   140 
   129 def help(ui, cmd=None):
   141 def help(ui, cmd=None):
   130     '''show help for a given command or all commands'''
   142     '''show help for a given command or all commands'''
   131     if cmd:
   143     if cmd:
   132         try:
   144         try:
   133             i = find(cmd)
   145             i = find(cmd)
   310 def history(ui, repo):
   322 def history(ui, repo):
   311     """show the changelog history"""
   323     """show the changelog history"""
   312     for i in range(repo.changelog.count() - 1, -1, -1):
   324     for i in range(repo.changelog.count() - 1, -1, -1):
   313         show_changeset(ui, repo, rev=i)
   325         show_changeset(ui, repo, rev=i)
   314 
   326 
       
   327 def identify(ui, repo):
       
   328     """print information about the working copy"""
       
   329     (c, a, d, u) = repo.diffdir(repo.root)
       
   330     mflag = (c or a or d or u) and "+" or ""
       
   331     parents = [parent for parent in repo.dirstate.parents()
       
   332                       if parent != hg.nullid]
       
   333     if not parents:
       
   334         ui.note("unknown\n")
       
   335         return
       
   336 
       
   337     tstring = ''
       
   338     if not ui.quiet:
       
   339         taglist = [e[1] for e in tags_load(repo)]
       
   340         tstring = " %s" % ' + '.join([e[0] for e in taglist
       
   341                                       if e[0] != 'tip' and e[1] in parents])
       
   342 
       
   343     hexfunc = ui.verbose and hg.hex or hg.short
       
   344     pstring = '+'.join([hexfunc(parent) for parent in parents])
       
   345     ui.write("%s%s%s\n" % (pstring, mflag, tstring))
       
   346 
   315 def init(ui, source=None):
   347 def init(ui, source=None):
   316     """create a new repository or copy an existing one"""
   348     """create a new repository or copy an existing one"""
   317 
   349 
   318     if source:
   350     if source:
   319         paths = {}
   351         paths = {}
   332             ui.debug("copying by hardlink\n")
   364             ui.debug("copying by hardlink\n")
   333             os.system("cp -al %s/.hg .hg" % source)
   365             os.system("cp -al %s/.hg .hg" % source)
   334             try:
   366             try:
   335                 os.remove(".hg/dirstate")
   367                 os.remove(".hg/dirstate")
   336             except: pass
   368             except: pass
       
   369 
       
   370             repo = hg.repository(ui, ".")
       
   371 
   337         else:
   372         else:
   338             repo = hg.repository(ui, ".", create=1)
   373             repo = hg.repository(ui, ".", create=1)
   339             other = hg.repository(ui, source)
   374             other = hg.repository(ui, source)
   340             cg = repo.getchangegroup(other)
   375             cg = repo.getchangegroup(other)
   341             repo.addchangegroup(cg)
   376             repo.addchangegroup(cg)
   342     else:
   377     else:
   343         hg.repository(ui, ".", create=1)
   378         repo = hg.repository(ui, ".", create=1)
       
   379 
       
   380     f = repo.opener("hgrc", "w")
       
   381     f.write("[paths]\n")
       
   382     f.write("default = %s\n" % source)
   344 
   383 
   345 def log(ui, repo, f):
   384 def log(ui, repo, f):
   346     """show the revision history of a single file"""
   385     """show the revision history of a single file"""
   347     f = relpath(repo, [f])[0]
   386     f = relpath(repo, [f])[0]
   348 
   387 
   407         if files:
   446         if files:
   408             if os.system("patch -p%d < %s %s" % (strip, pf, quiet)):
   447             if os.system("patch -p%d < %s %s" % (strip, pf, quiet)):
   409                 raise "patch failed!"
   448                 raise "patch failed!"
   410         repo.commit(files, text)
   449         repo.commit(files, text)
   411 
   450 
   412 def pull(ui, repo, source):
   451 def pull(ui, repo, source="default"):
   413     """pull changes from the specified source"""
   452     """pull changes from the specified source"""
   414     paths = {}
   453     paths = {}
   415     for name, path in ui.configitems("paths"):
   454     for name, path in ui.configitems("paths"):
   416         paths[name] = path
   455         paths[name] = path
   417 
   456 
   455     else:
   494     else:
   456         r = os.system(cmd)
   495         r = os.system(cmd)
   457         os.kill(child, signal.SIGTERM)
   496         os.kill(child, signal.SIGTERM)
   458         return r
   497         return r
   459 
   498 
   460 def rawcommit(ui, repo, files, **rc):
   499 def rawcommit(ui, repo, flist, **rc):
   461     "raw commit interface"
   500     "raw commit interface"
   462 
   501 
   463     text = rc['text']
   502     text = rc['text']
   464     if not text and rc['logfile']:
   503     if not text and rc['logfile']:
   465         try: text = open(rc['logfile']).read()
   504         try: text = open(rc['logfile']).read()
   466         except IOError: pass
   505         except IOError: pass
   467     if not text and not rc['logfile']:
   506     if not text and not rc['logfile']:
   468         print "missing commit text"
   507         print "missing commit text"
   469         return 1
   508         return 1
   470 
   509 
   471     files = relpath(repo, files)
   510     files = relpath(repo, flist)
   472     if rc['files']:
   511     if rc['files']:
   473         files += open(rc['files']).read().splitlines()
   512         files += open(rc['files']).read().splitlines()
   474         
   513         
   475     repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent'])
   514     repo.rawcommit(files, text, rc['user'], rc['date'], *rc['parent'])
   476  
   515  
   503     for f in d: print "R", f
   542     for f in d: print "R", f
   504     for f in u: print "?", f
   543     for f in u: print "?", f
   505 
   544 
   506 def tags(ui, repo):
   545 def tags(ui, repo):
   507     """list repository tags"""
   546     """list repository tags"""
   508     repo.lookup(0) # prime the cache
   547     n = tags_load(repo)
   509     i = repo.tags.items()
       
   510     n = []
       
   511     for e in i:
       
   512         try:
       
   513             l = repo.changelog.rev(e[1])
       
   514         except KeyError:
       
   515             l = -2
       
   516         n.append((l, e))
       
   517 
   548 
   518     n.sort()
   549     n.sort()
   519     n.reverse()
   550     n.reverse()
   520     i = [ e[1] for e in n ]
   551     i = [ e[1] for e in n ]
   521     for k, n in i:
   552     for k, n in i:
   581     "export": (export, [], "hg export <changeset>"),
   612     "export": (export, [], "hg export <changeset>"),
   582     "forget": (forget, [], "hg forget [files]"),
   613     "forget": (forget, [], "hg forget [files]"),
   583     "heads": (heads, [], 'hg heads'),
   614     "heads": (heads, [], 'hg heads'),
   584     "history": (history, [], 'hg history'),
   615     "history": (history, [], 'hg history'),
   585     "help": (help, [], 'hg help [command]'),
   616     "help": (help, [], 'hg help [command]'),
       
   617     "identify|id": (identify, [], 'hg identify'),
   586     "init": (init, [], 'hg init [url]'),
   618     "init": (init, [], 'hg init [url]'),
   587     "log": (log, [], 'hg log <file>'),
   619     "log": (log, [], 'hg log <file>'),
   588     "manifest|dumpmanifest": (manifest, [], 'hg manifest [rev]'),
   620     "manifest|dumpmanifest": (manifest, [], 'hg manifest [rev]'),
   589     "parents": (parents, [], 'hg parents [node]'),
   621     "parents": (parents, [], 'hg parents [node]'),
   590     "patch|import": (patch,
   622     "patch|import": (patch,
   625 norepo = "init branch help debugindex debugindexdot"
   657 norepo = "init branch help debugindex debugindexdot"
   626 
   658 
   627 def find(cmd):
   659 def find(cmd):
   628     i = None
   660     i = None
   629     for e in table.keys():
   661     for e in table.keys():
   630         if re.match(e + "$", cmd):
   662         if re.match("(%s)$" % e, cmd):
   631             return table[e]
   663             return table[e]
   632 
   664 
   633     raise UnknownCommand(cmd)
   665     raise UnknownCommand(cmd)
   634 
   666 
   635 class SignalInterrupt(Exception): pass
   667 class SignalInterrupt(Exception): pass