Ë
    ùmxiew  ã                   óÖ  — d gZ ddlmZ ddlZddlmZ ddlZddlZddlZddl	m
Z
mZ ddlZddlmZmZmZmZmZ ddlZddlmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlmZ ddl m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ejh                  dk\  rddl)m5Z5 nddl6m5Z5 ddl7m8Z8 e1rddl9m:Z: ddl;m<Z<  ejz                  e>«      Z? G d„ d ej€                  e$ee#«      ZAy)ÚCommité    )ÚdefaultdictN)ÚBytesIO)ÚPopenÚPIPE)ÚaltzoneÚdaylightÚ	localtimeÚtimeÚtimezone)ÚIStream)ÚGit)ÚDiffable)ÚActorÚStatsÚfinalize_processÚ
hex_to_biné   )Úbase)ÚTree)ÚSerializableÚTraversableIterableObjÚaltz_to_utctz_strÚfrom_timestampÚparse_actor_and_dateÚ
parse_date)
ÚAnyÚDictÚIOÚIteratorÚListÚSequenceÚTupleÚTYPE_CHECKINGÚUnionÚcast)é   é   )ÚLiteral)ÚPathLike)ÚSymbolicReference)ÚRepoc                   óT  ‡ — e Zd ZU dZdZdZdZdZdZe	d   e
d<   dZd	Zed    e
d
<   	 	 	 	 	 	 	 	 	 	 	 d;dddedeedf   deedf   deedf   dedef   deedf   deedf   dedef   deeedf   d
eed    df   deedf   deedf   ddfˆ fd„Zedd ded   fd„«       Zedddd defd„«       Zdedd fd„Zd eddfˆ fd!„Zedej<                  fd"„«       Zedej<                  fd#„«       Z edeeef   fd$„«       Z!d<d%ee"ee"   f   dedefd&„Z#edefd'„«       Z$e	 d<ddd(eed d)f   d%ee"ee"   f   dede%d    f
d*„«       Z&d<d%ee"ee"   f   dede%d    fd+„Z'ede(fd,„«       Z)ede*eef   fd-„«       Z+ede,eeef      fd.„«       Z-ede*ee,e   f   fd/„«       Z.eddd0ee/e0f   de%d    fd1„«       Z1e	 	 	 	 	 	 d=dddeeef   ded2ede,d    f   d3e2dedef   dedef   d4edeej<                  f   d5edeej<                  f   dd fd6„«       Z3d7e4dd fd8„Z5d7e4dd fd9„Z6ede,e   fd:„«       Z7ˆ xZ8S )>r   a1  Wraps a git commit object.

    See :manpage:`gitglossary(7)` on "commit object":
    https://git-scm.com/docs/gitglossary#def_commit_object

    :note:
        This class will act lazily on some of its attributes and will query the value on
        demand only if it involves calling the git binary.
    ÚGIT_AUTHOR_DATEÚGIT_COMMITTER_DATEzi18n.commitencodingzUTF-8ÚcommitÚtype)ÚtreeÚauthorÚauthored_dateÚauthor_tz_offsetÚ	committerÚcommitted_dateÚcommitter_tz_offsetÚmessageÚparentsÚencodingÚgpgsigÚhexshar:   NÚrepor,   Úbinshar2   r3   r4   r5   r6   r7   r8   r9   r;   r<   Úreturnc                 óF  •— t         ‰| �  ||«       || _        |�#t        |t        «      sJ dt        |«      z  «       ‚|�|| _        |�|| _        |�|| _        |�|| _	        |�|| _
        |�|| _        |	�|	| _        |
�|
| _        |�|| _        |�|| _        |�|| _        yy)a  Instantiate a new :class:`Commit`. All keyword arguments taking ``None`` as
        default will be implicitly set on first query.

        :param binsha:
            20 byte sha1.

        :param tree:
            A :class:`~git.objects.tree.Tree` object.

        :param author:
            The author :class:`~git.util.Actor` object.

        :param authored_date: int_seconds_since_epoch
            The authored DateTime - use :func:`time.gmtime` to convert it into a
            different format.

        :param author_tz_offset: int_seconds_west_of_utc
            The timezone that the `authored_date` is in.

        :param committer:
            The committer string, as an :class:`~git.util.Actor` object.

        :param committed_date: int_seconds_since_epoch
            The committed DateTime - use :func:`time.gmtime` to convert it into a
            different format.

        :param committer_tz_offset: int_seconds_west_of_utc
            The timezone that the `committed_date` is in.

        :param message: string
            The commit message.

        :param encoding: string
            Encoding of the message, defaults to UTF-8.

        :param parents:
            List or tuple of :class:`Commit` objects which are our parent(s) in the
            commit dependency graph.

        :return:
            :class:`Commit`

        :note:
            Timezone information is in the same format and in the same sign as what
            :func:`time.altzone` returns. The sign is inverted compared to git's UTC
            timezone.
        Nz(Tree needs to be a Tree instance, was %s)ÚsuperÚ__init__r?   Ú
isinstancer   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   )Úselfr>   r?   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   Ú	__class__s                 €úI/home/htdocs/ttos/venv/lib/python3.12/site-packages/git/objects/commit.pyrC   zCommit.__init__m   sÜ   ø€ ô~ 	‰Ñ˜˜vÔ&ØˆŒØÐÜ˜d¤DÔ)ÐbÐ+UÔX\Ð]aÓXbÑ+bÓbÐ)ØÐØˆDŒIØÐØ ˆDŒKØÐ$Ø!.ˆDÔØÐ'Ø$4ˆDÔ!ØÐ Ø&ˆDŒNØÐ%Ø"0ˆDÔØÐ*Ø':ˆDÔ$ØÐØ"ˆDŒLØÐØ"ˆDŒLØÐØ$ˆDŒMØÐØ ˆD�Kð ó    )r   .c                 ó,   — t        |j                  «      S ©N)Útupler:   )Úclsr0   s     rG   Ú_get_intermediate_itemszCommit._get_intermediate_itemsÇ   s   € ä�V—^‘^Ó$Ð$rH   c                 óò   — t        «       }|j                  |«       |j                  «       }|j                  d«       |j                  j                  t        | j                  ||«      «      }|j                  S )zåCalculate the sha of a commit.

        :param repo:
            :class:`~git.repo.base.Repo` object the commit should be part of.

        :param commit:
            :class:`Commit` object for which to generate the sha.
        r   )	r   Ú
_serializeÚtellÚseekÚodbÚstorer   r1   r?   )rL   r>   r0   ÚstreamÚ	streamlenÚistreams         rG   Ú_calculate_sha_zCommit._calculate_sha_Ë   sX   € ô “ˆØ×Ñ˜&Ô!Ø—K‘K“Mˆ	Ø�‰�AŒà—(‘(—.‘.¤¨¯©°9¸fÓ!EÓFˆØ�~‰~ÐrH   Úkwargsc                 óL  — | j                   D �ci c]  }|t        | |«      “Œ }}|D ]  }|| j                   vsŒt        d«      ‚ |j                  |«        | j                  | j
                  | j                  fi |¤Ž}| j                  | j
                  |«      |_        |S c c}w )z·Create new commit object from an existing commit object.

        Any values provided as keyword arguments will replace the corresponding
        attribute in the new object.
        zinvalid attribute name)	Ú	__slots__ÚgetattrÚ
ValueErrorÚupdaterF   r>   ÚNULL_BIN_SHArW   r?   )rE   rX   ÚkÚattrsÚattrnameÚ
new_commits         rG   ÚreplacezCommit.replaceÞ   s¡   € ð /3¯n©nÖ=¨�”G˜D !Ó$Ñ$Ð=ˆÐ=àò 	;ˆHØ˜tŸ~™~Ò-Ü Ð!9Ó:Ð:ð	;ð 	�‰�VÔØ#�T—^‘^ D§I¡I¨t×/@Ñ/@ÑJÀEÑJˆ
Ø ×0Ñ0°·±¸JÓGˆ
ÔàÐùò >s   �B!Úattrc                 ó  •— |t         j                  v rb| j                  j                  j	                  | j
                  «      \  }}| _        }| j                  t        |j                  «       «      «       y t        ‰| �-  |«       y rJ   )r   rZ   r>   rR   rT   r?   ÚsizeÚ_deserializer   ÚreadrB   Ú_set_cache_)rE   rd   Ú_binshaÚ	_typenamerT   rF   s        €rG   ri   zCommit._set_cache_ñ   s^   ø€ Ø”6×#Ñ#Ñ#à48·I±I·M±M×4HÑ4HÈÏÉÓ4UÑ1ˆG�Y ¤	¨6Ø×Ñœg f§k¡k£mÓ4Õ5ä‰GÑ Õ%rH   c                 óB   — t        | j                  | j                  «      S rJ   )r   r4   r5   ©rE   s    rG   Úauthored_datetimezCommit.authored_datetimeú   s   € ä˜d×0Ñ0°$×2GÑ2GÓHÐHrH   c                 óB   — t        | j                  | j                  «      S rJ   )r   r7   r8   rm   s    rG   Úcommitted_datetimezCommit.committed_datetimeþ   s   € ä˜d×1Ñ1°4×3KÑ3KÓLÐLrH   c                 ó²   — t        | j                  t        «      r| j                  j                  dd«      d   S | j                  j                  dd«      d   S )z):return: First line of the commit messageú
r   r   ó   
)rD   r9   ÚstrÚsplitrm   s    rG   ÚsummaryzCommit.summary  sJ   € ô �d—l‘l¤CÔ(Ø—<‘<×%Ñ% d¨AÓ.¨qÑ1Ð1à—<‘<×%Ñ% e¨QÓ/°Ñ2Ð2rH   Úpathsc                 ó*  — |rJt         | j                  j                  j                  | j                  d|fi |¤Žj                  «       «      S t         | j                  j                  j                  | j                  fi |¤Žj                  «       «      S )a  Count the number of commits reachable from this commit.

        :param paths:
            An optional path or a list of paths restricting the return value to commits
            actually containing the paths.

        :param kwargs:
            Additional options to be passed to :manpage:`git-rev-list(1)`. They must not
            alter the output style of the command, or parsing will yield incorrect
            results.

        :return:
            An int defining the number of reachable commits
        ú--)Úlenr>   ÚgitÚrev_listr=   Ú
splitlines)rE   rw   rX   s      rG   ÚcountzCommit.count
  sq   € ñ" ÜÐ-�t—y‘y—}‘}×-Ñ-¨d¯k©k¸4ÀÑQÈ&ÑQ×\Ñ\Ó^Ó_Ð_ÜÐ)�4—9‘9—=‘=×)Ñ)¨$¯+©+Ñ@¸Ñ@×KÑKÓMÓNÐNrH   c                 óL   — | j                   j                  j                  | «      S )zÐ
        :return:
            String describing the commits hex sha based on the closest
            :class:`~git.refs.reference.Reference`.

        :note:
            Mostly useful for UI purposes.
        )r>   r{   Úname_revrm   s    rG   r€   zCommit.name_rev  s   € ð �y‰y�}‰}×%Ñ% dÓ+Ð+rH   Úrevr+   c                 ó  — d|v rt        d«      ‚dg}|r@t        |t        t        j                  f«      r|f}nt        |«      }|j                  |«        |j                  j                  ||fddi|¤Ž}| j                  ||«      S )a  Find all commits matching the given criteria.

        :param repo:
            The :class:`~git.repo.base.Repo`.

        :param rev:
            Revision specifier. See :manpage:`git-rev-parse(1)` for viable options.

        :param paths:
            An optional path or list of paths. If set only :class:`Commit`\s that
            include the path or paths will be considered.

        :param kwargs:
            Optional keyword arguments to :manpage:`git-rev-list(1)` where:

            * ``max_count`` is the maximum number of commits to fetch.
            * ``skip`` is the number of commits to skip.
            * ``since`` selects all commits since some date, e.g. ``"1970-01-01"``.

        :return:
            Iterator yielding :class:`Commit` items.
        Úprettyz<--pretty cannot be used as parsing expects single sha's onlyry   Ú
as_processT)
r\   rD   rt   Úosr*   rK   Úextendr{   r|   Ú_iter_from_process_or_stream)rL   r>   r�   rw   rX   Ú	args_listÚ	paths_tupÚprocs           rG   Ú
iter_itemszCommit.iter_items+  sŒ   € ð< �vÑÜÐ[Ó\Ð\ð &* Fˆ	áä˜%¤#¤r§{¡{Ð!3Ô4Ø"˜H‘	ä! %›L�	à×Ñ˜YÔ'ð !ˆt�x‰x× Ñ   iÑK¸DÐKÀFÑKˆØ×/Ñ/°°dÓ;Ð;rH   c                 ó|   — |j                  dd«      }|dk(  rd}||d<    | j                  | j                  | |fi |¤ŽS )a‹  Iterate *all* parents of this commit.

        :param paths:
            Optional path or list of paths limiting the :class:`Commit`\s to those that
            contain at least one of the paths.

        :param kwargs:
            All arguments allowed by :manpage:`git-rev-list(1)`.

        :return:
            Iterator yielding :class:`Commit` objects which are parents of ``self``
        Úskipr   r   )Úgetr‹   r>   )rE   rw   rX   r�   s       rG   Úiter_parentszCommit.iter_parents_  sG   € ð �z‰z˜& !Ó$ˆØ�1Š9ØˆDØˆˆv‰àˆt�‰˜tŸy™y¨$°Ñ@¸Ñ@Ð@rH   c                 óê  — dt         t           dt        fd„}| j                  sO| j                  j                  j                  | j                  ddddd¬«      j                  «       dd } ||«      }nb| j                  j                  j                  | j                  d	   j                  | j                  dddd¬
«      j                  «       } ||«      }t        j                  | j                  |«      S )zÀCreate a git stat from changes between this commit and its first parent
        or from all changes done if this is the very first commit.

        :return:
            :class:`Stats`
        Úlinesr@   c           
      óÊ   — d}t        | | t        | «      dz  d  «      D ]B  \  }}|j                  d«      d   d   }|j                  d«      \  }}}||›d|›d|›d|›d�z  }ŒD |S )NÚ é   ú	r   éÿÿÿÿrr   )Úziprz   ru   )r‘   ÚtextÚ	file_infoÚlineÚchange_typeÚ
insertionsÚ	deletionsÚfilenames           rG   Úprocess_linesz#Commit.stats.<locals>.process_lines}  s{   € ØˆDÜ#& u¨e´C¸³JÀ!±OÐ4EÐ.FÓ#Gò \‘�	˜4Ø'Ÿo™o¨dÓ3°AÑ6°rÑ:�Ø48·J±J¸tÓ4DÑ1�˜Y¨Øªkº:ÂyÒRZÐ[Ñ[‘ð\ð ˆKrH   ry   T)ÚnumstatÚ
no_renamesÚrootÚrawr   Nr   )r    r¡   r£   )r!   rt   r:   r>   r{   Ú	diff_treer=   r}   Údiffr   Ú_list_from_string)rE   rŸ   r‘   r˜   s       rG   ÚstatszCommit.statst  sØ   € ð	¤¤c¡ð 	¬só 	ð �|Š|Ø—I‘I—M‘M×+Ñ+Ø—‘˜T¨4¸DÀtÐQUð ,ó ç‰j‹l˜1˜2ðˆEñ ! Ó'‰Dà—I‘I—M‘M×&Ñ&Ø—‘˜Q‘×&Ñ&¨¯©°TÀ4ÐTXÐ^bð 'ó ç‰j‹lð ñ ! Ó'ˆDÜ×&Ñ& t§y¡y°$Ó7Ð7rH   c                 ó¨   — t        j                  dt        d¬«       | j                  j	                  «       D ��ci c]  \  }}||d   “Œ c}}S c c}}w )al  Deprecated. Get the trailers of the message as a dictionary.

        :note:
            This property is deprecated, please use either :attr:`trailers_list` or
            :attr:`trailers_dict`.

        :return:
            Dictionary containing whitespace stripped trailer information.
            Only contains the latest instance of each trailer key.
        zWCommit.trailers is deprecated, use Commit.trailers_list or Commit.trailers_dict insteadr”   )Ú
stacklevelr   )ÚwarningsÚwarnÚDeprecationWarningÚtrailers_dictÚitems)rE   r_   Úvs      rG   ÚtrailerszCommit.trailers‘  sJ   € ô 	�‰ØeÜØõ	
ð
 %)×$6Ñ$6×$<Ñ$<Ó$>×?™D˜A˜q��1�Q‘4‘Ó?Ð?ùÓ?s   ºAc                 óÎ  — g d¢}| j                   j                  j                  |dt        ¬«      }|j	                  t        | j                  «      j                  «       «      d   j                  d«      }|j                  «       }|sg S g }|j                  d«      D ]F  }|j                  dd«      \  }}|j                  |j                  «       |j                  «       f«       ŒH |S )	a’  Get the trailers of the message as a list.

        Git messages can contain trailer information that are similar to :rfc:`822`
        e-mail headers. See :manpage:`git-interpret-trailers(1)`.

        This function calls ``git interpret-trailers --parse`` onto the message to
        extract the trailer information, returns the raw trailer data as a list.

        Valid message with trailer::

            Subject line

            some body information

            another information

            key1: value1.1
            key1: value1.2
            key2 :    value 2 with inner spaces

        Returned list will look like this::

            [
                ("key1", "value1.1"),
                ("key1", "value1.2"),
                ("key2", "value 2 with inner spaces"),
            ]

        :return:
            List containing key-value tuples of whitespace stripped trailer information.
        )r{   zinterpret-trailersz--parseT)r„   rV   r   Úutf8rr   ú:r   )r>   r{   Úexecuter   Úcommunicatert   r9   ÚencodeÚdecodeÚstripru   Úappend)rE   ÚcmdrŠ   ÚtrailerÚtrailer_listÚtÚkeyÚvals           rG   Útrailers_listzCommit.trailers_list¤  sÎ   € òB 7ˆØ"&§)¡)§-¡-×"7Ñ"7ØØÜð #8ó #
ˆð
 ×'Ñ'¬¨D¯L©LÓ(9×(@Ñ(@Ó(BÓCÀAÑF×MÑMÈfÓUˆØ—-‘-“/ˆáØˆIàˆØ—‘˜tÓ$ò 	<ˆAØ—w‘w˜s A“‰HˆC�Ø×Ñ §¡£¨c¯i©i«kÐ :Õ;ð	<ð ÐrH   c                 ó†   — t        t        «      }| j                  D ]  \  }}||   j                  |«       Œ t	        |«      S )a  Get the trailers of the message as a dictionary.

        Git messages can contain trailer information that are similar to :rfc:`822`
        e-mail headers. See :manpage:`git-interpret-trailers(1)`.

        This function calls ``git interpret-trailers --parse`` onto the message to
        extract the trailer information. The key value pairs are stripped of leading and
        trailing whitespaces before they get saved into a dictionary.

        Valid message with trailer::

            Subject line

            some body information

            another information

            key1: value1.1
            key1: value1.2
            key2 :    value 2 with inner spaces

        Returned dictionary will look like this::

            {
                "key1": ["value1.1", "value1.2"],
                "key2": ["value 2 with inner spaces"],
            }


        :return:
            Dictionary containing whitespace stripped trailer information, mapping
            trailer keys to a list of their corresponding values.
        )r   ÚlistrÀ   r¹   Údict)rE   Údr¾   r¿   s       rG   r­   zCommit.trailers_dictØ  sA   € ôF œÓˆØ×*Ñ*ò 	‰HˆC�Øˆc‰F�M‰M˜#Õð	ä�A‹wˆrH   Úproc_or_streamc              #   óð  K  — t        |d«      r)t        t        |«      }|j                  �+|j                  }nt        |d«      rt        t        |«      }|}j
                  }	  |«       }|sn`|j                  «       }t        |«      dkD  r|j                  dd«      \  }}t        |«      dk(  s
J d|z  «       ‚ | |t        |«      «      –— Œjt        |d«      rt        t        |«      }t        |«       yy­w)a�  Parse out commit information into a list of :class:`Commit` objects.

        We expect one line per commit, and parse the actual commit information directly
        from our lighting fast object database.

        :param proc:
            :manpage:`git-rev-list(1)` process instance - one sha per line.

        :return:
            Iterator supplying :class:`Commit` objects
        ÚwaitNÚreadlineé(   r   zInvalid line: %s)Úhasattrr&   r   Ústdoutr   rÈ   r¸   rz   ru   r   r   )rL   r>   rÅ   rT   rÈ   rš   r=   Ú_s           rG   r‡   z#Commit._iter_from_process_or_stream   sï   è ø€ ô( �> 6Ô*Ü!¤%¨Ó8ˆNØ×$Ñ$Ð0Ø'×.Ñ.‘Ü�^ ZÔ0Ü!¤" nÓ5ˆNØ#ˆFà—?‘?ˆØÙ“:ˆDÙØØ—Z‘Z“\ˆFÜ�6‹{˜RÒà ŸJ™J t¨QÓ/‘	�˜ô �v“; "Ò$ÐAÐ&8¸6Ñ&AÓAÐ$Ù�dœJ vÓ.Ó/Ò/ð ô  �> 6Ô*Ü!¤%¨Ó8ˆNÜ˜^Õ,ð +ùs   ‚C4C6Úparent_commitsÚheadÚauthor_dateÚcommit_datec
                 óV  — |€	 |j                   j                  g}n$|D ]  }
t        |
| «      rŒt        d|
›d| › �«      ‚ |j	                  «       }t
        j                  }|xs t        j                  |«      }|xs t        j                  |«      }t        t        «       «      }t        xr t        «       j                  dkD  }|rt        nt         }|j#                  | j$                  d«      }|rt'        |«      \  }}n|rt'        |«      \  }}n||}}|j#                  | j(                  d«      }|	rt'        |	«      \  }}n|rt'        |«      \  }}n||}}| j*                  j-                  d«      \  }}|j/                  ||| j0                  «      }t        |t2        «      st5        d«      ‚t        |t2        «      r|j7                  |«      } | || j8                  ||||||||||«      }| j;                  ||«      |_        |r$ddl}	 |j                   jA                  ||¬«       |S |S # t        $ r g }Y �Œ÷w xY w# t        $ rd |jB                  jD                  jG                  ||j                   jH                  |d	|z  ¬«      }|j                   jK                  |d
|z  ¬«       Y |S w xY w)a  Commit the given tree, creating a :class:`Commit` object.

        :param repo:
            :class:`~git.repo.base.Repo` object the commit should be part of.

        :param tree:
            :class:`~git.objects.tree.Tree` object or hex or bin sha.
            The tree of the new commit.

        :param message:
            Commit message. It may be an empty string if no message is provided. It will
            be converted to a string, in any case.

        :param parent_commits:
            Optional :class:`Commit` objects to use as parents for the new commit. If
            empty list, the commit will have no parents at all and become a root commit.
            If ``None``, the current head commit will be the parent of the new commit
            object.

        :param head:
            If ``True``, the HEAD will be advanced to the new commit automatically.
            Otherwise the HEAD will remain pointing on the previous commit. This could
            lead to undesired results when diffing files.

        :param author:
            The name of the author, optional.
            If unset, the repository configuration is used to obtain this value.

        :param committer:
            The name of the committer, optional.
            If unset, the repository configuration is used to obtain this value.

        :param author_date:
            The timestamp for the author field.

        :param commit_date:
            The timestamp for the committer field.

        :return:
            :class:`Commit` object representing the new commit.

        :note:
            Additional information about the committer and author are taken from the
            environment or from the git configuration. See :manpage:`git-commit-tree(1)`
            for more information.
        NzParent commit 'z' must be of type r   r“   ú.z)conf_encoding could not be coerced to str)Úlogmsgzcommit (initial): %szcommit: Switching to %s)&rÎ   r0   r\   rD   Úconfig_readerr…   Úenvironr   r6   r3   Úintr   r	   r
   Útm_isdstr   r   rŽ   Úenv_author_dater   Úenv_committer_dateÚconf_encodingru   Ú	get_valueÚdefault_encodingrt   Ú	TypeErrorr2   r^   rW   r?   Úgit.refsÚ
set_commitÚrefsÚHeadÚcreateÚrefÚset_reference)rL   r>   r2   r9   rÍ   rÎ   r3   r6   rÏ   rÐ   ÚpÚcrÚenvÚ	unix_timeÚis_dstÚoffsetÚauthor_date_strÚauthor_timeÚauthor_offsetÚcommitter_date_strÚcommitter_timeÚcommitter_offsetÚenc_sectionÚ
enc_optionrÚ   rb   r{   Úmasters                               rG   Úcreate_from_treezCommit.create_from_tree1  s¾  € ðv Ð!ð$Ø"&§)¡)×"2Ñ"2Ð!3‘ð $ò U�Ü! ! SÕ)Ü$ °q°eÐ;MÈcÈUÐ%SÓTÐTðUð ×ÑÓ!ˆÜ�j‰jˆàÒ4¤§¡°Ó!4ˆ	ØÒ+œ5Ÿ<™<¨Ó+ˆô œ›“Kˆ	ÜÒ6œi›k×2Ñ2°QÑ6ˆÙ"•¬ˆàŸ'™' #×"5Ñ"5°rÓ:ˆÙÜ)3°KÓ)@Ñ&ˆK™ÙÜ)3°OÓ)DÑ&ˆK™à)2°F˜ˆKð !ŸW™W S×%;Ñ%;¸RÓ@ÐÙÜ/9¸+Ó/FÑ,ˆNÑ,ÙÜ/9Ð:LÓ/MÑ,ˆNÑ,à/8¸&Ð,ˆNð #&×"3Ñ"3×"9Ñ"9¸#Ó">Ñˆ�ZØŸ™ [°*¸c×>RÑ>RÓSˆÜ˜-¬Ô-ÜÐGÓHÐHô �dœCÔ Ø—9‘9˜T“?ˆDñ ØØ×ÑØØØØØØØØØØó
ˆ
ð  ×/Ñ/°°jÓAˆ
Ôáó ð[Ø—	‘	×$Ñ$ Z¸Ð$Ô@ð ÐˆzÐøôA ò $à!#“ð$ûôf ò 	[ð Ÿ™Ÿ™×-Ñ-ØØ—I‘I—M‘MØØ1°GÑ;ð	 .ó �ð —	‘	×'Ñ'¨Ð7PÐSYÑ7YÐ'ÕZð Ðð	[ús$   „H) ÈH; È)H8È7H8È;A)J(Ê'J(rT   c           
      ó†  — |j                   } |d| j                  z  j                  d«      «       | j                  D ]  } |d|z  j                  d«      «       Œ | j                  }|j
                  }| j                  }d} ||d||j                  | j                  t        | j                  «      fz  j                  | j                  «      «       |j
                  } ||d||j                  | j                  t        | j                  «      fz  j                  | j                  «      «       | j                  | j                  k7  r$ |d| j                  z  j                  d«      «       	 | j                  d«      rT |d	«       | j                   j#                  d
«      j%                  d
«      D ]  } |d|z   d
z   j                  d«      «       Œ!  |d«       t)        | j*                  t,        «      r- || j*                  j                  | j                  «      «       | S  || j*                  «       | S # t&        $ r Y Œnw xY w)Nztree %s
Úasciiz
parent %s
z%s %s <%s> %s %s
r3   r6   zencoding %s
r<   s   gpgsigrr   ú rs   )Úwriter2   r¶   r:   r3   Únamer6   Úemailr4   r   r5   r;   r7   r8   rÜ   Ú__getattribute__r<   Úrstripru   ÚAttributeErrorrD   r9   rt   )	rE   rT   rø   rå   ÚaÚanameÚcÚfmtÚsiglines	            rG   rO   zCommit._serializeÓ  s  € Ø—‘ˆÙˆ{˜TŸY™YÑ&×.Ñ.¨wÓ7Ô8Ø—‘ò 	7ˆAÙ�= 1Ñ$×,Ñ,¨WÓ5Õ6ð	7ð �K‰KˆØ—‘ˆØ�N‰NˆØ"ˆÙààØØ—G‘GØ×&Ñ&Ü% d×&;Ñ&;Ó<ðñ÷ ‰f�T—]‘]Ó#ô	
ð —‘ˆÙààØØ—G‘GØ×'Ñ'Ü% d×&>Ñ&>Ó?ðñ÷ ‰f�T—]‘]Ó#ô	
ð �=‰=˜D×1Ñ1Ò1Ù�? T§]¡]Ñ2×:Ñ:¸7ÓCÔDð	Ø×$Ñ$ XÔ.Ù�iÔ Ø#Ÿ{™{×1Ñ1°$Ó7×=Ñ=¸dÓCò B�GÙ˜3 ™=¨4Ñ/×7Ñ7¸Ó@ÕAðBñ
 	ˆeŒô �d—l‘l¤CÔ(Ù�$—,‘,×%Ñ% d§m¡mÓ4Ô5ð ˆñ �$—,‘,Ôàˆøô ò 	Ùð	ús   Å,A%H4 È4	I È?I c           
      óv  — |j                   }t        | j                  t         |«       j	                  «       d   «      t        j
                  dz  d«      | _        g | _        d }	  |«       }|j                  d«      s|}n_| j                  j                   t        | «      | j                  t        |j	                  «       d   j                  d«      «      «      «       Œzt        | j                  «      | _        |} |«       } |«       }|j                  d«      rC |«       }|j                  d	«      r |«       }|j                  d	«      rŒ|j                  d«      rŒC| j                  | _        d| _        |}|j!                  «       }|rÝ|d
d dk(  r7||j#                  d	«      dz   d  j                  | j                  d«      | _        n†|d
d dk(  r~||j#                  d	«      dz   d  dz   }	d}
	  |«       }|sn$|d
d d	k7  r|j!                  «       }d}
n	|	|dd  z  }	Œ.|	j%                  d«      j                  | j                  d«      | _        |
rŒÇ |«       j!                  «       }|rŒÝ	 t'        |j                  | j                  d«      «      \  | _        | _        | _        	 t'        |j                  | j                  d«      «      \  | _        | _        | _        |j;                  «       | _        	 | j<                  j                  | j                  d«      | _        | S # t.        $ r& t0        j3                  d|| j                  d¬«       Y Œªw xY w# t.        $ r& t0        j3                  d|| j                  d¬«       Y Œ£w xY w# t.        $ r1 t0        j3                  d| j<                  | j                  d¬«       Y | S w xY w)Nr   é   r“   Ts   parentr–   rö   s	   mergetag ó    r   é
   s	   encoding Úignoreé   s   gpgsig rs   Frc   z3Failed to decode author line '%s' using encoding %s)Úexc_infoz6Failed to decode committer line '%s' using encoding %sz/Failed to decode message '%s' using encoding %s)rÈ   r   r>   r   ru   Útree_idr2   r:   Ú
startswithr¹   r1   r·   rK   rÜ   r;   r<   r¸   Úfindrü   r   r3   r4   r5   ÚUnicodeDecodeErrorÚ_loggerÚerrorr6   r7   r8   rh   r9   )rE   rT   rÈ   Ú	next_lineÚparent_lineÚauthor_lineÚcommitter_lineÚencÚbufÚsigÚis_next_headerÚsigbufs               rG   rg   zCommit._deserialize  sˆ  € Ø—?‘?ˆÜ˜Ÿ™¤J©x«z×/?Ñ/?Ó/AÀ!Ñ/DÓ$EÄtÇ|Á|ÐWYÑGYÐ[]Ó^ˆŒ	àˆŒØˆ	ØÙ"›*ˆKØ×)Ñ)¨)Ô4Ø'�	Øà�L‰L×Ñ 
¤ T£
¨4¯9©9´jÀ×ARÑARÓATÐUWÑAX×A_ÑA_Ð`gÓAhÓ6iÓ jÔkð ô ˜TŸ\™\Ó*ˆŒð  ˆÙ!›ˆñ “Jˆ	Ø×"Ñ" <Ô0Ù ›
ˆIØ×&Ñ& tÔ,Ù$›J�	ð ×&Ñ& tÕ,ð ×"Ñ" <Õ0ð ×-Ñ-ˆŒØˆŒð ˆØ�i‰i‹kˆÙØ�1�Rˆy˜LÒ(Ø # C§H¡H¨T£N°QÑ$6Ð$8Ð 9× @Ñ @ÀÇÁÐPXÓ Y�•Ø�Q�q�˜ZÒ'Ø˜#Ÿ(™( 4›.¨1Ñ,Ð.Ð/°%Ñ7�Ø!&�ØÙ%›Z�FÙ!ØØ˜a �{ dÒ*Ø$Ÿl™l›n˜Ø)-˜ØØ˜6 ! "˜:Ñ%�Cð ð "Ÿj™j¨Ó/×6Ñ6°t·}±}ÀhÓO�”Ù!ØÙ“*×"Ñ"Ó$ˆCò' ð,	ô
 % [×%7Ñ%7¸¿¹ÀyÓ%QÓRñ	Ø”ØÔ"ØÔ%ð	ô
 % ^×%:Ñ%:¸4¿=¹=È)Ó%TÓUñ	Ø”ØÔ#ØÔ(ð —{‘{“}ˆŒð	ØŸ<™<×.Ñ.¨t¯}©}¸iÓHˆDŒLð ˆøôK "ò 	Ü�M‰MØEØØ—‘Øð	 ö ð	ûô "ò 	Ü�M‰MØHØØ—‘Øð	 ö ð	ûô "ò 	Ü�M‰MØAØ—‘Ø—‘Øð	 õ ð ˆð	ús6   É&8L Ê8M Ë-+M> Ì,M	ÍM	Í,M;Í:M;Í>6N8Î7N8c                 óÎ   — g }| j                   rVt        j                  dt        | j                   «      t        j                  «      }|D ]  }|j                  t        |Ž «       Œ |S )a  Search the commit message for any co-authors of this commit.

        Details on co-authors:
        https://github.blog/2018-01-29-commit-together-with-co-authors/

        :return:
            List of co-authors for this commit (as :class:`~git.util.Actor` objects).
        z^Co-authored-by: (.*) <(.*?)>$)r9   ÚreÚfindallrt   Ú	MULTILINEr¹   r   )rE   Ú
co_authorsÚresultsr3   s       rG   r  zCommit.co_authorsx  s_   € ð ˆ
à�<Š<Ü—j‘jØ1Ü�D—L‘LÓ!Ü—‘óˆGð
 "ò 2�Ø×!Ñ!¤%¨ .Õ1ð2ð ÐrH   )NNNNNNNNNNN)r“   )NFNNNN)9Ú__name__Ú
__module__Ú__qualname__Ú__doc__rØ   rÙ   rÚ   rÜ   r1   r)   Ú__annotations__rZ   Ú_id_attribute_r"   Úbytesr%   r   r   rÖ   Úfloatrt   rC   Úclassmethodr#   rM   rW   r   rc   ri   ÚpropertyÚdatetimern   rp   rv   r*   r~   r€   r    r‹   r�   r   r§   r   r°   r!   rÀ   r­   r   r   r‡   Úboolrô   r   rO   rg   r  Ú__classcell__)rF   s   @rG   r   r   C   sA  ø… ñð (€OØ-Ðð *€Mð Ðà&€Dˆ'�(Ñ
Ó&ð€Ið €Nà�hÑÓð #'Ø%)Ø*.Ø/3Ø(,Ø+/Ø26Ø+/Ø37Ø%)Ø#'ñX!àðX!ð ðX!ð �D˜$�JÑð	X!ð
 �e˜T�kÑ"ðX!ð ˜S $˜YÑ'ðX!ð    e Ñ,ðX!ð ˜ ˜Ñ%ðX!ð ˜c 4˜iÑ(ðX!ð # 4¨ ;Ñ/ðX!ð �s˜E 4Ð'Ñ(ðX!ð �x Ñ)¨4Ð/Ñ0ðX!ð ˜˜T˜	Ñ"ðX!ð �c˜4�iÑ ðX!ð 
õX!ðt ð%¨Xð %¸%ÀÑ:Nò %ó ð%ð ð 6ð °8ð Àò ó ðð$ ð ¨ó ð&& ð &¨õ &ð ðI 8×#4Ñ#4ò Ió ðIð ðM H×$5Ñ$5ò Mó ðMð ð3˜˜s E˜zÑ*ò 3ó ð3ñO˜5 ¨8°HÑ+=Ð!=Ñ>ð OÈsð OÐWZó Oð* ð	,˜#ò 	,ó ð	,ð ð
 68ñ	1<àð1<ð �3˜Ð"5Ð5Ñ6ð1<ð �X˜x¨Ñ1Ð1Ñ2ð	1<ð
 ð1<ð 
�(Ñ	ò1<ó ð1<ñfA %¨°(¸8Ñ2DÐ(DÑ"Eð AÐVYð AÐ^fÐgoÑ^pó Að* ð8�uò 8ó ð8ð8 ð@˜$˜s C˜x™.ò @ó ð@ð$ ð1˜t E¨#¨s¨(¡OÑ4ò 1ó ð1ðf ð%˜t C¨¨c© NÑ3ò %ó ð%ðN ð.-°ð .-ÈÈeÐUWÈiÑHXð .-Ð]eÐfnÑ]oò .-ó ð.-ð` ð 7;ØØ%)Ø(,Ø;?Ø;?ñ]àð]ð �D˜#�IÑð]ð ð	]ð
 ˜d D¨¡NÐ2Ñ3ð]ð ð]ð �d˜E�kÑ"ð]ð ˜˜u˜Ñ%ð]ð ˜4  h×&7Ñ&7Ð7Ñ8ð]ð ˜4  h×&7Ñ&7Ð7Ñ8ð]ð 
ò]ó ð]ðB9 ð 9¨Xó 9ðvf 7ð f¨xó fðT ð˜D ™Kò ó ôrH   )BÚ__all__Úcollectionsr   r)  Úior   Úloggingr…   r  Ú
subprocessr   r   Úsysr   r   r	   r
   r   rª   Úgitdbr   Úgit.cmdr   Úgit.diffr   Úgit.utilr   r   r   r   r“   r   r2   r   Úutilr   r   r   r   r   r   Útypingr   r   r   r    r!   r"   r#   r$   r%   r&   Úversion_infor)   Útyping_extensionsÚ	git.typesr*   rÞ   r+   Úgit.repor,   Ú	getLoggerr  r  ÚObjectr   © rH   rG   ú<module>r?     s¬   ðð ˆ*€å #Û Ý Û Û 	Û 	ß "Û 
ß =Õ =Û å å Ý ß ?Ó ?å Ý ÷÷ ÷÷ ÷ ð ×Ñ�vÒÞå)å áÝ*Ýð ˆ'×
Ñ
˜HÓ
%€ôJˆT�[‰[Ð0°(¸Lõ JrH   