code: def _getHead(self, branch):
          
          d = utils.getProcessOutput(self.hgbin,
                                     ['heads', '-r', branch,
                                         '--template={rev}' + os.linesep],
                                     path=self._absWorkdir(), env=os.environ, errortoo=False)
  
          @d.addErrback
          def no_head_err(exc):
              log.err("hgpoller: could not find revision %r in repository %r" % (
                  branch, self.repourl))
  
          @d.addCallback
          def results(heads):
              if not heads:
                  return
  
              if len(heads.split()) > 1:
                  log.err(("hgpoller: caught several heads in branch %r "
                           "from repository %r. Staying at previous revision"
                           "You should wait until the situation is normal again "
                           "due to a merge or directly strip if remote repo "
                           "gets stripped later.") % (branch, self.repourl))
                  return
  
              # in case of whole reconstruction, are we sure that we'll get the
              # same node -> rev assignations ?
              return heads.strip().decode(self.encoding)
          return d
docs: Return a deferred for branch head revision or None.
  
          We'll get an error if there is no head for this branch, which is
          probably a good thing, since it's probably a misspelling
          (if really buildbotting a branch that does not have any changeset
          yet, one shouldn't be surprised to get errors)