
                             d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ	 ddl
mZ ddlmZ dd	lmZ dd
lmZ  G d dej"                        Zy)z#Command for diffing image packages.    )absolute_import)division)unicode_literals)base_classes)util)base)
exceptions)filter_utils)flagsc                   2    e Zd ZdZed        Zd Zd Zd Zy)DiffzA Displays the version differences of packages between two images.c                     | j                   j                  d       t        j                  |        t        j                  |        t        j
                  |        t        j                  |        | t        _        y )Nz       table(
          name:label=PACKAGE,
          version_base:label=VERSION_BASE,
          revision_base:label=REVISION_BASE,
          version_diff:label=VERSION_DIFF,
          revision_diff:label=REVISION_DIFF
        ))	display_info	AddFormatpackage_flagsAddResourceArgsAddShowAddedPackagesFlagAddShowRemovedPackagesFlagAddShowUpdatedPackagesFlagr   _parser)parsers    +lib/surface/compute/images/packages/diff.pyArgsz	Diff.Args    s\    
!! #  !!&)**62,,V4,,V4DL    c                 ,   i }|D ]u  }|j                   j                  }g }|j                   j                  D ]=  }|j                  |j                  j                  |j                  j
                  f       ? |||<   w |st        j                  |      |S )N)installationnamelocationappendversionrevisionr	   %ImagePackagesInfoUnavailableException)selfimage_packages
image_namepackage_versions
occurrencepackage_nameversionsr   s           r   _GetVersionszDiff._GetVersions3   s    $
,,11lh --66())..0@0@0I0IJK 7'/|$ % <<ZHHr   c                    t        |j                               j                  t        |j                                     }d}|j                  s|j                  s|j
                  rd}g }d}|D ]  }|j                  |g       }	|j                  |g       }
t        |	      t        |
      k7  s?t        |	      }t        |
      }|sE|j                  r
|dk(  r|dk7  s/|j                  r
|dk7  r|dk(  s|j
                  s|dk7  s|dk7  st        t        ||            D ]9  }||k  r|	|   n|\  }}||k  r|
|   n|\  }}|||||d}|j                  |       ;  t        |d       S )NTF)-r,   r   )r   version_baserevision_baseversion_diffrevision_diffc                     | d   S )Nr    )package_diffs    r   <lambda>zDiff._GetDiff.<locals>.<lambda>d   s	    f1Er   )key)setkeysunionshow_added_packagesshow_removed_packagesshow_updated_packagesgetlenrangemaxr   sorted)r#   argspackage_versions_basepackage_versions_diffall_package_namesshow_all_diff_packagesdiffemptyr(   versions_baseversions_difflen_baselen_diffidxr-   r.   r/   r0   r3   s                      r   _GetDiffzDiff._GetDiffA   s   16689??!&&()+ "  D$>$>""$DE)+//bAm+//bAm	]	s=1	1}%}%"%%(a-HM''HMh!m''HMh!m3x23ch +8*<%* (L- h +8*<%* (L- % ,!. ,!.L KK% 4 *0 $EFFr   c                 f   |j                   j                  j                         }|j                   j                  j                         }t	        j
                  t        j                  j                        }t        j                  ||      }t        j                  ||      }t        j                  |j                  |dd      }t        j                  |j                  |dd      }| j                  ||j                        }	| j                  ||j                        }
| j                  ||	|
      S )z6Yields the differences of packages between two images.N)
project_idresource_filteroccurrence_filterresource_urls)CONCEPTS
base_imageParse
diff_imager   ComputeApiHolderr   ReleaseTrackGAr
   	GetFiltercontaineranalysis_utilMakeOccurrenceRequestprojectr*   rM   )r#   rA   base_image_refdiff_image_refholderresource_filter_baseresource_filter_diffimage_packages_baseimage_packages_diffrB   rC   s              r   RunzDiff.Runf   s    ]]--335N]]--335N **4+<+<+?+?@F'11.&I'11.&I0FF!));Od4 1FF!));Od4 !--.A.2oo? --.A.2oo? ==46KLLr   N)	__name__
__module____qualname____doc__staticmethodr   r*   rM   re   r2   r   r   r   r      s)    I $#GJMr   r   N)ri   
__future__r   r   r   googlecloudsdk.api_lib.computer   (googlecloudsdk.api_lib.containeranalysisr   r[   googlecloudsdk.callioper   2googlecloudsdk.command_lib.compute.images.packagesr	   r
   r   r   ListCommandr   r2   r   r   <module>rq      s;    * &  ' 7 S ( I K UcM4 cMr   