[PATCH] emerge: Add head commit per repo to --info

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] emerge: Add head commit per repo to --info

Manuel Rüger
This adds the following to emerge --info output for git and rsync based
repositories:

Head commit of repository gentoo: 0518b330edac963f54f98df33391b8e7b9eaee4c
---
 pym/_emerge/actions.py                     | 10 ++++++++++
 pym/portage/sync/modules/git/__init__.py   |  3 ++-
 pym/portage/sync/modules/git/git.py        | 12 ++++++++++++
 pym/portage/sync/modules/rsync/__init__.py |  3 ++-
 pym/portage/sync/modules/rsync/rsync.py    | 12 ++++++++++++
 pym/portage/sync/syncbase.py               |  5 ++++-
 6 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py
index c8a62fb01..3c6c265f7 100644
--- a/pym/_emerge/actions.py
+++ b/pym/_emerge/actions.py
@@ -1644,8 +1644,18 @@ def action_info(settings, trees, myopts, myfiles):

  for repo in repos:
  last_sync = portage.grabfile(os.path.join(repo.location, "metadata",
"timestamp.chk"))
+ head_commit = None
  if last_sync:
  append("Timestamp of repository %s: %s" % (repo.name, last_sync[0]))
+ if repo.sync_type:
+ sync = portage.sync.module_controller.get_class(repo.sync_type)()
+ options = { 'repo': repo }
+ try:
+ head_commit = sync.retrieve_head(options=options)
+ except NotImplementedError:
+ head_commit = (1, False)
+ if head_commit and head_commit[0] == os.EX_OK:
+ append("Head commit of repository %s: %s" % (repo.name, head_commit[1]))

  # Searching contents for the /bin/sh provider is somewhat
  # slow. Therefore, use the basename of the symlink target
diff --git a/pym/portage/sync/modules/git/__init__.py
b/pym/portage/sync/modules/git/__init__.py
index e7206e12d..2f1d35226 100644
--- a/pym/portage/sync/modules/git/__init__.py
+++ b/pym/portage/sync/modules/git/__init__.py
@@ -43,12 +43,13 @@ def _check_depth(self, attr):
  'sourcefile': "git",
  'class': "GitSync",
  'description': doc,
- 'functions': ['sync', 'new', 'exists'],
+ 'functions': ['sync', 'new', 'exists', 'retrieve_head'],
  'func_desc': {
  'sync': 'Performs a git pull on the repository',
  'new': 'Creates the new repository at the specified location',
  'exists': 'Returns a boolean of whether the specified dir ' +
  'exists and is a valid Git repository',
+ 'retrieve_head': 'Returns the head commit hash',
  },
  'validate_config': CheckGitConfig,
  'module_specific_options': (
diff --git a/pym/portage/sync/modules/git/git.py
b/pym/portage/sync/modules/git/git.py
index bea79c7e7..8df9ca612 100644
--- a/pym/portage/sync/modules/git/git.py
+++ b/pym/portage/sync/modules/git/git.py
@@ -130,3 +130,15 @@ def update(self):
  cwd=portage._unicode_encode(self.repo.location))

  return (os.EX_OK, current_rev != previous_rev)
+
+ def retrieve_head(self, **kwargs):
+ '''Get information about the head commit'''
+ if kwargs:
+ self._kwargs(kwargs)
+ rev_cmd = [self.bin_command, "rev-list", "--max-count=1", "HEAD"]
+ try:
+ ret = (os.EX_OK, subprocess.check_output(rev_cmd,
+ cwd=portage._unicode_encode(self.repo.location)))
+ except CalledProcessError:
+ ret = (1, False)
+ return ret
diff --git a/pym/portage/sync/modules/rsync/__init__.py
b/pym/portage/sync/modules/rsync/__init__.py
index 7ebb5476c..c2fdc4188 100644
--- a/pym/portage/sync/modules/rsync/__init__.py
+++ b/pym/portage/sync/modules/rsync/__init__.py
@@ -17,11 +17,12 @@
  'sourcefile': "rsync",
  'class': "RsyncSync",
  'description': doc,
- 'functions': ['sync', 'new', 'exists'],
+ 'functions': ['sync', 'new', 'exists', 'retrieve_head'],
  'func_desc': {
  'sync': 'Performs rsync transfers on the repository',
  'new': 'Creates the new repository at the specified location',
  'exists': 'Returns a boolean if the specified directory exists',
+ 'retrieve_head': 'Returns the head commit based on
metadata/timestamp.commit',
  },
  'validate_config': CheckSyncConfig,
  'module_specific_options': (
diff --git a/pym/portage/sync/modules/rsync/rsync.py
b/pym/portage/sync/modules/rsync/rsync.py
index cf958356a..45a70e7dd 100644
--- a/pym/portage/sync/modules/rsync/rsync.py
+++ b/pym/portage/sync/modules/rsync/rsync.py
@@ -303,6 +303,18 @@ def new(self, **kwargs):
  return (1, False)
  return self.update()

+ def retrieve_head(self, **kwargs):
+ '''Get information about the head commit'''
+ if kwargs:
+ self._kwargs(kwargs)
+ last_sync = portage.grabfile(os.path.join(self.repo.location,
"metadata", "timestamp.commit"))
+ ret = (1, False)
+ if last_sync:
+ try:
+ ret = (os.EX_OK, last_sync[0].split()[0])
+ except IndexError:
+ pass
+ return ret

  def _set_rsync_defaults(self):
  portage.writemsg("PORTAGE_RSYNC_OPTS empty or unset, using hardcoded
defaults\n")
diff --git a/pym/portage/sync/syncbase.py b/pym/portage/sync/syncbase.py
index 6aaa9c437..05e4d69d4 100644
--- a/pym/portage/sync/syncbase.py
+++ b/pym/portage/sync/syncbase.py
@@ -129,8 +129,11 @@ def new(self, **kwargs):
  '''Do the initial download and install of the repository'''
  raise NotImplementedError

-
  def update(self):
  '''Update existing repository
  '''
  raise NotImplementedError
+
+ def retrieve_head(self, **kwargs):
+ '''Get information about the head commit'''
+ raise NotImplementedError

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] emerge: Add head commit per repo to --info

Zac Medico-2
On Fri, Jun 30, 2017 at 2:46 AM, Manuel Rüger <[hidden email]> wrote:

> This adds the following to emerge --info output for git and rsync based
> repositories:
>
> Head commit of repository gentoo: 0518b330edac963f54f98df33391b8e7b9eaee4c
> ---
>  pym/_emerge/actions.py                     | 10 ++++++++++
>  pym/portage/sync/modules/git/__init__.py   |  3 ++-
>  pym/portage/sync/modules/git/git.py        | 12 ++++++++++++
>  pym/portage/sync/modules/rsync/__init__.py |  3 ++-
>  pym/portage/sync/modules/rsync/rsync.py    | 12 ++++++++++++
>  pym/portage/sync/syncbase.py               |  5 ++++-
>  6 files changed, 42 insertions(+), 3 deletions(-)

Looks good. Thanks!
--
Thanks,
Zac

Reply | Threaded
Open this post in threaded view
|

Re: [PATCH] emerge: Add head commit per repo to --info

Manuel Rüger
On 04.07.2017 21:14, Zac Medico wrote:

> On Fri, Jun 30, 2017 at 2:46 AM, Manuel Rüger <[hidden email]> wrote:
>> This adds the following to emerge --info output for git and rsync based
>> repositories:
>>
>> Head commit of repository gentoo: 0518b330edac963f54f98df33391b8e7b9eaee4c
>> ---
>>  pym/_emerge/actions.py                     | 10 ++++++++++
>>  pym/portage/sync/modules/git/__init__.py   |  3 ++-
>>  pym/portage/sync/modules/git/git.py        | 12 ++++++++++++
>>  pym/portage/sync/modules/rsync/__init__.py |  3 ++-
>>  pym/portage/sync/modules/rsync/rsync.py    | 12 ++++++++++++
>>  pym/portage/sync/syncbase.py               |  5 ++++-
>>  6 files changed, 42 insertions(+), 3 deletions(-)
>
> Looks good. Thanks!
>
Applied as
https://gitweb.gentoo.org/proj/portage.git/commit/?id=0e1699ad6b3f8eec56fbd6dd6255ed1145e89dd5

Thanks for the review!


signature.asc (650 bytes) Download Attachment