Merge pull request #4 from larshp/master

sync
This commit is contained in:
Johannes Konings 2018-07-07 17:33:47 +02:00 committed by GitHub
commit 7bea09ac10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
238 changed files with 9791 additions and 2273 deletions

View File

@ -16,33 +16,8 @@ A good bug report should not leave others needing to chase you up for more infor
## Development Guidelines ## Development Guidelines
a. Make sure there is an open issue for the stuff that you want to work on. When starting the development add a comment in the issue. This will allow for discussing possible solutions, and avoid having multiple people look into the same issue. http://docs.abapgit.org/development/guidelines.html
b. Keep the commits/PR as small as possible, try not to fix multiple issues in one commit/PR if possible. Smaller changes are easier to review, and are more likely to be accepted.
c. Variables are prefixed using the standard setting in Code Inspector check "Extended Naming Conventions for Programs"
d. abapGit is targeted for version 702, so the code should only contain expressions/statements that works on 702
e. commit often, whenever something is working, and is a step in the right direction do a commit or PR. This way other contributors can see the changes, and it will minimize the risk of merge conflicts.
f. Use pretty printer, keywords upper case + indentation
External Links:
https://guides.github.com/activities/contributing-to-open-source/
## Building/Creating a PR ## Building/Creating a PR
1: Install the development version of abapGit by cloning the repository using an online repository, or downloading the zip file and installing it using an offline repository. http://docs.abapgit.org/development/contributing.html
2: The abapGit report installed in your system will now consist of multiple includes
3: Do the required changes to includes and/or main program
4: Create the pull request with the changes to the includes
5: After the pull request is merged, abapmerge will automatically run to build the non-include version of abapGit.
Every time a commit is pushed to the master branch, https://travis-ci.org/ will be triggered to perform the build. It will use [abapmerge](https://github.com/larshp/abapmerge) to merge all the includes into a single file, the build can be downloaded from https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap
Alternatively, use the GitHub webinterface to change the files and submit a pull request.

View File

@ -8,6 +8,83 @@ Legend
+ : added + : added
- : removed - : removed
2018-07-06 v1.71.0
------------------
* validate sub and super packages when installing
! delete empty packages
+ UI for editing requirements
! track user which created repo
+ new repository overview page
* delete PARA after DTEL
* TABL, check existence before SELECTing
2018-06-28 v1.70.0
------------------
+ possibility to run code inspector before staging
* WAPA better delta handling
+ Block pull if any of deserialized object is locked
+ CHAR support
2018-06-17 v1.69.1
------------------
+ new exit: change_tadir
* fix objects outside of repo
* started dependency injection for unit testing
* DDLS fix dump
* handle repair transports
* SSFO catch exception
* SEO_CS_CACHE downport
* TABL consider DD12L in changed_by
2018-06-09 v1.69.0
------------------
! FORM serialization, filenames changed
* fix gui show changes only
* fix checkout annotated tags
* set new remote: supply remote SHA1
2018-06-06 v1.68.3
------------------
* fix dump when objects are moved
* abapGit news feature now works in more cases
* FUGR force update of where-used
* tag page redesigned
* TABL, clear field RESERVEDTE
* http agent changed
2018-06-04 v1.68.2
------------------
* CLAS ignore deltion of non-existent objects
* ENHO implement changed by
* fix TOBJ diffs
* fix error in XML syntax highlighter
* ECATT remove empty attributes
* evaluate 2FA implementations alphabetically
2018-06-03 v1.68.1
------------------
* XSLT fix changed_by
* Fix dump in XML syntax highlighter
* Delivery class of database table changed
2018-05-27 v1.68.0
------------------
+ Resolve conflicts functionallity/UI (beta)
+ Annotated tags
* Locking problems fixed(?)
2018-05-19 v1.67.0
------------------
+ IDOC support
+ IEXT support
* DOMA deletion downport
* ALV popup
* DDLS downport
! default starting folder changed to "/src/"
* Author regex fixed in branch overview
! DDLS clear additional fields
! Moving an object outside main package shows up as deletion
2018-05-11 v1.66.0 2018-05-11 v1.66.0
------------------ ------------------
! Clone without pull, user has to choose pull after creating online repo ! Clone without pull, user has to choose pull after creating online repo

View File

@ -1,8 +1,15 @@
title: abapGit documentation title: abapGit documentation
highlighter: rouge highlighter: rouge
collections_dir: collections
collections:
development:
output: true
defaults: defaults:
- - scope:
scope: path: ""
path: "" # an empty string here means all files in the project
values: values:
layout: "default" layout: "default"
- scope:
path: "_development"
values:
layout: "development"

View File

@ -1,8 +1,8 @@
<footer class="nav-footer wrap"> <footer class="nav-footer wrap">
<div class="nav-refs"> <div class="nav-refs">
<a href="https://github.com/larshp/abapGit"> <a href="https://github.com/larshp/abapGit">
<span class="mega-octicon octicon-mark-github"></span> <span class="mega-octicon octicon-mark-github"></span>
</a> </a>
</div> </div>
<footer> <footer>

View File

@ -1,8 +1,8 @@
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<link rel="shortcut icon" type="image/png" href="favicon.png"> <link rel="shortcut icon" type="image/png" href="/img/favicon.png">
<link rel="stylesheet" href="main.css"> <link rel="stylesheet" href="/assets/main.css">
<link rel="stylesheet" href="highlight.css"> <link rel="stylesheet" href="/assets/highlight.css">
<link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/font/octicons.min.css"> <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/font/octicons.min.css">
<title>{% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }}{% endif %}</title> <title>{% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }}{% endif %}</title>
<meta name="description" content="{% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }} - Home{% endif %}" /> <meta name="description" content="{% if page.title %}{{ site.title }} - {{ page.title }}{% else %}{{ site.title }} - Home{% endif %}" />

View File

@ -1,6 +1,6 @@
<div class="page-head"> <div class="page-head">
<div class="wrap"> <div class="wrap">
<a href="./"><img class="head-logo" src="img/logo.svg" height="40" alt="abapGit"></a> <a href="/"><img class="head-logo" src="/img/logo.svg" height="40" alt="abapGit"></a>
<span class="head-title"> &#x25BA; documentation</span> <span class="head-title"> &#x25BA; documentation</span>
</div> </div>
</div> </div>

View File

@ -48,3 +48,5 @@
{% endif %} {% endif %}
{% endfor %} {% endfor %}
</ul> </ul>
<a href="/development">Development</a>

View File

@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
{% include head.html %}
<body>
{% include header.html %}
<div class="container wrap">
<div class="nav">
<h3>Development</h3>
<ul>
{% assign pages = site.development | sort: 'order' %}
{% for doc in pages %}
{% if doc.title != "Development" %}
<li><a href="{{ doc.url }}">{{ doc.title }}</a></li>
{% endif %}
{% endfor %}
</ul>
</div>
<div class="content">
<h1>{{ page.title }}</h1>
{{ content }}
</div>
</div>
{% include footer.html %}
</body>
</html>

View File

@ -1,6 +1,5 @@
--- ---
title: abapGit API title: API
category: other
order: 80 order: 80
--- ---

View File

@ -0,0 +1,20 @@
---
title: Contributing
order: 5
---
*******************************
1: Install the development version of abapGit by cloning the repository using an online repository, or downloading the zip file and installing it using an offline repository.
2: The abapGit report installed in your system will now consist of multiple classes
3: Do the required changes to classes and/or main program
4: Create the pull request with the changes
5: After the pull request is merged, abapmerge will automatically run to build the report version of abapGit.
Every time a commit is pushed to the master branch, [Travis CI](https://travis-ci.org/) will be triggered to perform the build. It will use [abapmerge](https://github.com/larshp/abapmerge) to merge all the includes into a single file, the build can be downloaded from [https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap](https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap)
Alternatively, use the GitHub webinterface to change the files and submit a pull request.

View File

@ -0,0 +1,13 @@
---
title: docs
order: 200
---
abapGit uses [github pages](https://help.github.com/articles/what-is-github-pages/) for documentation,
all pages are generated statically using [Jekyll](https://jekyllrb.com/)
Building /docs/ locally:
`bundle install`
`bundle exec jekyll serve --incremental --port $PORT --host $IP`

View File

@ -1,6 +1,5 @@
--- ---
title: Object File Formats title: Object File Formats
category: other
order: 40 order: 40
--- ---

View File

@ -0,0 +1,27 @@
---
title: Development Guidelines
order: 10
---
### Practical
* For non-tivial changes make sure there is an open issue. When starting the development add a comment in the issue. This will allow for discussing possible solutions, and avoid having multiple people look into the same issue.
* Keep the commits/PR as small as possible, try not to fix multiple issues in one commit/PR if possible. Smaller changes are easier to review, and are more likely to be accepted.
* commit often, whenever something is working, and is a step in the right direction do a commit or PR. This way other contributors can see the changes, and it will minimize the risk of merge conflicts.
External Links:
[https://guides.github.com/activities/contributing-to-open-source/](https://guides.github.com/activities/contributing-to-open-source/)
### Conventions
#### Prefixing
Variables are prefixed using the standard setting in [abapOpenChecks Naming Conventions](http://docs.abapopenchecks.org/checks/69/)
#### Downport
abapGit is targeted for version 702, so the code should only contain expressions/statements that works on 702.
[abaplint](https://abaplint.org) will automatically check every PR for language syntax that is not available on 702.
#### Pretty Printer
Use pretty printer, keywords upper case + indentation, [abapOpenChecks](http://docs.abapopenchecks.org/checks/06/) can be used for checking this

View File

@ -0,0 +1,8 @@
---
title: Development
order: 10
---
*******************************
Development related information

View File

@ -1,6 +1,5 @@
--- ---
title: Technical Links title: Technical Links
category: other
order: 50 order: 50
--- ---

View File

@ -0,0 +1,10 @@
---
title: Unit Tests
order: 70
---
abapGit uses dependency lookup as an approach for writing unit tests, see example in ZCL_ABAPGIT_TADIR, ZCL_ABAPGIT_FACTORY, and ZCL_ABAPGIT_INJECTOR
Unit tests that create and delete objects in the system are categorized as dangerous, these tests can be enabled via Advanced -> Settings
Use organization https://github.com/abapGit-tests for storing serialization test cases

View File

@ -45,7 +45,7 @@ On [Feburary 22nd](https://githubengineering.com/crypto-removal-notice/), GitHub
See [SAP note 510007](https://launchpad.support.sap.com/#/notes/510007), section 7, for information on how to configure SSL. See [SAP note 510007](https://launchpad.support.sap.com/#/notes/510007), section 7, for information on how to configure SSL.
Add parameters Add profile parameters:
``` ```
ssl/client_ciphersuites = 150:PFS:HIGH::EC_P256:EC_HIGH ssl/client_ciphersuites = 150:PFS:HIGH::EC_P256:EC_HIGH
ssl/ciphersuites = 135:PFS:HIGH::EC_P256:EC_HIGH ssl/ciphersuites = 135:PFS:HIGH::EC_P256:EC_HIGH

View File

Before

Width:  |  Height:  |  Size: 764 B

After

Width:  |  Height:  |  Size: 764 B

View File

@ -1,7 +1,6 @@
--- ---
title: Welcome title: Welcome
--- ---
abapGit is a git client for ABAP developed in ABAP. It requires SAP BASIS version 702 or higher. abapGit is a git client for ABAP developed in ABAP. It requires SAP BASIS version 702 or higher.
Latest build: [zabapgit.abap](https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap) Latest build: [zabapgit.abap](https://raw.githubusercontent.com/abapGit/build/master/zabapgit.abap)

View File

@ -78,3 +78,11 @@ SAP Teched Barcelona
[ABAP Code Reviews with abapGit](https://blogs.sap.com/2018/03/23/abap-code-reviews-with-abapgit/) -Eduardo Copat [ABAP Code Reviews with abapGit](https://blogs.sap.com/2018/03/23/abap-code-reviews-with-abapgit/) -Eduardo Copat
[Get into Git!](https://blogs.sap.com/2018/04/13/get-into-git/) - Mike Pokraka [Get into Git!](https://blogs.sap.com/2018/04/13/get-into-git/) - Mike Pokraka
[ABAP The Special Snowflake](https://blogs.sap.com/2018/07/02/abap-the-special-snowflake/) - Nigel James
[Is SAPs ABAP a special snowflake or has a Git run it over?](https://diginomica.com/2018/07/03/is-saps-abap-a-special-snowflake-or-has-a-git-run-it-over/) - Den Howlett
[ORGANISIERE DEINE ARBEIT MIT ABAPGIT ](https://inspiricon.de/abapgit/) -Andra Atanasoaie
[Moderne ABAP Entwicklung mit abapGit](https://de.slideshare.net/ChristianGnter/moderne-abap-entwicklung-mit-abapgit) - Christian Günter

View File

@ -6,8 +6,7 @@ order: 45
abapGit uses a few external libraries, these are loaded via [cdnjs](https://cdnjs.com/about) abapGit uses a few external libraries, these are loaded via [cdnjs](https://cdnjs.com/about)
Library | License Library | Version | License
:------------ | :------------ :------------ | :------------ | :------------
[octicons](https://github.com/primer/octicons) 4.4.0 | MIT [octicons](https://github.com/primer/octicons) | 4.4.0 | MIT
[jquery](https://github.com/jquery/jquery) 3.2.1 | MIT [gitgraph](https://github.com/nicoespeon/gitgraph.js) | 1.2.3 | MIT
[gitgraph](https://github.com/nicoespeon/gitgraph.js) 1.2.3 | MIT

View File

@ -11,21 +11,36 @@ REPORT zabapgit_test_ssl.
* See https://github.com/larshp/abapGit/ * See https://github.com/larshp/abapGit/
PARAMETERS: p_url TYPE swc_value DEFAULT 'https://github.com', PARAMETERS: p_url1 TYPE swc_value DEFAULT 'https://github.com',
p_proxy TYPE string, p_url2 TYPE swc_value DEFAULT 'https://api.github.com'.
p_pxport TYPE string. * api.github.com is used when pushing code back to github
SELECTION-SCREEN BEGIN OF BLOCK proxy WITH FRAME.
* proxy settings, fill if your system is behind a proxy
PARAMETERS: p_proxy TYPE string,
p_pxport TYPE string,
p_puser TYPE string,
p_ppwd TYPE string.
SELECTION-SCREEN END OF BLOCK proxy.
START-OF-SELECTION. START-OF-SELECTION.
PERFORM run. PERFORM run USING p_url1.
WRITE: /, '----', /.
PERFORM run USING p_url2.
FORM run. FORM run USING iv_url TYPE swc_value.
DATA: lv_code TYPE i, DATA: lv_code TYPE i,
lv_url TYPE string, lv_url TYPE string,
li_client TYPE REF TO if_http_client, li_client TYPE REF TO if_http_client,
lt_errors TYPE TABLE OF string,
lv_error_message TYPE string. lv_error_message TYPE string.
lv_url = p_url. IF iv_url IS INITIAL.
RETURN.
ENDIF.
lv_url = iv_url.
cl_http_client=>create_by_url( cl_http_client=>create_by_url(
EXPORTING EXPORTING
url = lv_url url = lv_url
@ -35,11 +50,12 @@ FORM run.
IMPORTING IMPORTING
client = li_client ). client = li_client ).
* enter username and password for proxy authentication if needed IF NOT p_puser IS INITIAL.
* li_client->authenticate( li_client->authenticate(
* proxy_authentication = abap_true proxy_authentication = abap_true
* username = '' username = p_puser
* password = '' ). password = p_ppwd ).
ENDIF.
li_client->send( ). li_client->send( ).
li_client->receive( li_client->receive(
@ -49,12 +65,15 @@ FORM run.
http_processing_failed = 3 http_processing_failed = 3
OTHERS = 4 ). OTHERS = 4 ).
IF sy-subrc <> 0. IF sy-subrc <> 0.
WRITE: / 'Error Number', sy-subrc. WRITE: / 'Error Number', sy-subrc, /.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
li_client->get_last_error( li_client->get_last_error(
IMPORTING IMPORTING
message = lv_error_message ). message = lv_error_message ).
WRITE: / `Error message: ` && lv_error_message. SPLIT lv_error_message AT cl_abap_char_utilities=>newline INTO TABLE lt_errors.
LOOP AT lt_errors INTO lv_error_message.
WRITE: / lv_error_message.
ENDLOOP.
WRITE: / 'Also check transaction SMICM -> Goto -> Trace File -> Display End'. WRITE: / 'Also check transaction SMICM -> Goto -> Trace File -> Display End'.
RETURN. RETURN.
ENDIF. ENDIF.
@ -62,10 +81,10 @@ FORM run.
* if SSL Handshake fails, make sure to also check https://launchpad.support.sap.com/#/notes/510007 * if SSL Handshake fails, make sure to also check https://launchpad.support.sap.com/#/notes/510007
li_client->response->get_status( li_client->response->get_status(
IMPORTING IMPORTING
code = lv_code ). code = lv_code ).
IF lv_code = 200. IF lv_code = 200.
WRITE: / 'Success, it works'. WRITE: / lv_url, ': ok'.
ELSE. ELSE.
WRITE: / 'Error', lv_code. WRITE: / 'Error', lv_code.
ENDIF. ENDIF.

View File

@ -9,8 +9,12 @@ Type | Description | Supported
:------------ | :------------ | ------------: :------------ | :------------ | ------------:
ACID | Checkpoint Group | Yes ACID | Checkpoint Group | Yes
AOBJ | Archiving Object | [#804](https://github.com/larshp/abapGit/issues/804) AOBJ | Archiving Object | [#804](https://github.com/larshp/abapGit/issues/804)
ASFC | Field Catalog | [#1578](https://github.com/larshp/abapGit/issues/1578)
ASIS | Archiving Information Structure | [#1579](https://github.com/larshp/abapGit/issues/1579)
AUTH | Authorization Check Fields | Yes AUTH | Authorization Check Fields | Yes
AVAS | Classification | [#1360](https://github.com/larshp/abapGit/issues/1360)
BOBF | BOPF: Business Object Model | [#165](https://github.com/larshp/abapGit/issues/165) BOBF | BOPF: Business Object Model | [#165](https://github.com/larshp/abapGit/issues/165)
CHAR | Object characteristic | Yes
CHDO | Change Document Object | [#802](https://github.com/larshp/abapGit/issues/802) CHDO | Change Document Object | [#802](https://github.com/larshp/abapGit/issues/802)
CLAS | Class (ABAP Objects) | Yes CLAS | Class (ABAP Objects) | Yes
CMOD | Customer enhancement projects | [#151](https://github.com/larshp/abapGit/issues/151) CMOD | Customer enhancement projects | [#151](https://github.com/larshp/abapGit/issues/151)
@ -44,19 +48,25 @@ IAMU | Language-Independent IAC Binary Data | Yes
IARP | Parameters of IAC Language Resource | Yes IARP | Parameters of IAC Language Resource | Yes
IASP | Parameters of an IAC service | Yes IASP | Parameters of an IAC service | Yes
IATU | Language-Independent IAC Templates | Yes IATU | Language-Independent IAC Templates | Yes
IDOC | IDoc Type | Yes
IEXT | Enhancement | Yes
IWPR | Gateway Business Suite Enablement - Service Builder Project | [#75](https://github.com/larshp/abapGit/issues/75) IWPR | Gateway Business Suite Enablement - Service Builder Project | [#75](https://github.com/larshp/abapGit/issues/75)
JOBD | Technical Job Definition | Yes JOBD | Technical Job Definition | Yes
LPDC | Launchpad short texts | [#107](https://github.com/larshp/abapGit/issues/107) LPDC | Launchpad short texts | [#107](https://github.com/larshp/abapGit/issues/107)
MSAG | Message Class | Yes MSAG | Message Class | Yes
NROB | Number Range Objects | Yes NROB | Number Range Objects | Yes
OTGR | Object type group | [#1515](https://github.com/larshp/abapGit/issues/1515)
PARA | SPA/GPA Parameters | Yes PARA | SPA/GPA Parameters | Yes
PDTS | Standard Task | [#153](https://github.com/larshp/abapGit/issues/153) PDTS | Standard Task | [#153](https://github.com/larshp/abapGit/issues/153)
PDWS | Workflow templates | [#154](https://github.com/larshp/abapGit/issues/154) PDWS | Workflow templates | [#154](https://github.com/larshp/abapGit/issues/154)
PINF | Package interface | Yes PINF | Package interface | Yes
PRAG | Pragma in ABAP Source Code | Yes PRAG | Pragma in ABAP Source Code | Yes
PROG | Program | Yes PROG | Program | Yes
SAJC | Application job catalog entry | [#1580](https://github.com/larshp/abapGit/issues/1580)
SAJT | Application job template | [1581](https://github.com/larshp/abapGit/issues/1581)
SAMC | ABAP Messaging Channels | Yes SAMC | ABAP Messaging Channels | Yes
SAPC | ABAP Push Channels | Yes SAPC | ABAP Push Channels | Yes
SCP1 | BC Set or Customizing Profile | [#1004](https://github.com/larshp/abapGit/issues/1004)
SFBF | Business Function + Assignment | Yes SFBF | Business Function + Assignment | Yes
SFBS | Business Function Set + Assignment | Yes SFBS | Business Function Set + Assignment | Yes
SFPF | Form Object: Form | Yes SFPF | Form Object: Form | Yes
@ -72,6 +82,8 @@ SMIM | Info Object from the MIME Repository | Yes
SOTS | All Concepts (OTR) of a Package - Long Texts | [#792](https://github.com/larshp/abapGit/issues/792) SOTS | All Concepts (OTR) of a Package - Long Texts | [#792](https://github.com/larshp/abapGit/issues/792)
SPLO | Format Types | Yes SPLO | Format Types | Yes
SPRX | Proxy Object | [#87](https://github.com/larshp/abapGit/issues/87) SPRX | Proxy Object | [#87](https://github.com/larshp/abapGit/issues/87)
SUCU | Authorization Groups (TBRG_AUTH) | [#1434](https://github.com/larshp/abapGit/issues/1434)
SUSH | Assignment: Service --> Authorization Objects | [#1582](https://github.com/larshp/abapGit/issues/1582)
SRFC | RFC Service | Yes SRFC | RFC Service | Yes
SSFO | SAP Smart Form | Yes SSFO | SAP Smart Form | Yes
SSST | SAP Smart Style | Yes SSST | SAP Smart Style | Yes
@ -98,4 +110,6 @@ WEBI | Virtual End Point | Yes
XINX | Extension Index | Yes XINX | Extension Index | Yes
XSLT | Transformation | Yes XSLT | Transformation | Yes
Support for customizing planned, see [#1004](https://github.com/larshp/abapGit/issues/1004)
Also see [https://github.com/larshp/abapGit-Plugins](https://github.com/larshp/abapGit-Plugins) Also see [https://github.com/larshp/abapGit-Plugins](https://github.com/larshp/abapGit-Plugins)

View File

@ -30,9 +30,9 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS get_tags_only " For potential future use METHODS get_tags_only " For potential future use
RETURNING RETURNING
VALUE(rt_branches) TYPE zif_abapgit_definitions=>ty_git_branch_list_tt VALUE(rt_tags) TYPE zif_abapgit_definitions=>ty_git_branch_list_tt
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception.
CLASS-METHODS is_ignored CLASS-METHODS is_ignored
IMPORTING IMPORTING
!iv_branch_name TYPE clike !iv_branch_name TYPE clike
@ -45,9 +45,11 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
VALUE(rv_display_name) TYPE string . VALUE(rv_display_name) TYPE string .
CLASS-METHODS get_type CLASS-METHODS get_type
IMPORTING IMPORTING
!iv_branch_name TYPE clike !iv_branch_name TYPE clike
it_result TYPE stringtab OPTIONAL
iv_current_row_index TYPE sytabix OPTIONAL
RETURNING RETURNING
VALUE(rv_type) TYPE zif_abapgit_definitions=>ty_git_branch_type . VALUE(rv_type) TYPE zif_abapgit_definitions=>ty_git_branch_type .
CLASS-METHODS complete_heads_branch_name CLASS-METHODS complete_heads_branch_name
IMPORTING IMPORTING
!iv_branch_name TYPE clike !iv_branch_name TYPE clike
@ -62,6 +64,13 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
DATA mt_branches TYPE zif_abapgit_definitions=>ty_git_branch_list_tt . DATA mt_branches TYPE zif_abapgit_definitions=>ty_git_branch_list_tt .
DATA mv_head_symref TYPE string . DATA mv_head_symref TYPE string .
METHODS find_tag_by_name
IMPORTING
iv_branch_name TYPE string
RETURNING
VALUE(rs_branch) TYPE zif_abapgit_definitions=>ty_git_branch
RAISING
zcx_abapgit_exception.
CLASS-METHODS parse_branch_list CLASS-METHODS parse_branch_list
IMPORTING IMPORTING
@ -80,7 +89,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION. CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
METHOD complete_heads_branch_name. METHOD complete_heads_branch_name.
@ -106,10 +115,16 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Branch name empty' ). zcx_abapgit_exception=>raise( 'Branch name empty' ).
ENDIF. ENDIF.
READ TABLE mt_branches INTO rs_branch IF iv_branch_name CP |refs/tags/*|.
WITH KEY name = iv_branch_name. rs_branch = find_tag_by_name( iv_branch_name ).
IF sy-subrc <> 0. ELSE.
zcx_abapgit_exception=>raise( 'Branch not found' ).
READ TABLE mt_branches INTO rs_branch
WITH KEY name = iv_branch_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Branch not found' ).
ENDIF.
ENDIF. ENDIF.
ENDMETHOD. "find_by_name ENDMETHOD. "find_by_name
@ -157,15 +172,21 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
METHOD get_tags_only. METHOD get_tags_only.
FIELD-SYMBOLS <ls_branch> LIKE LINE OF mt_branches. FIELD-SYMBOLS <ls_branch> LIKE LINE OF mt_branches.
LOOP AT mt_branches ASSIGNING <ls_branch>. LOOP AT mt_branches ASSIGNING <ls_branch>
IF <ls_branch>-type = zif_abapgit_definitions=>c_git_branch_type-tag. WHERE type = zif_abapgit_definitions=>c_git_branch_type-lightweight_tag
APPEND <ls_branch> TO rt_branches. OR type = zif_abapgit_definitions=>c_git_branch_type-annotated_tag.
ENDIF. APPEND <ls_branch> TO rt_tags.
ENDLOOP. ENDLOOP.
ENDMETHOD. "get_tags_only ENDMETHOD. "get_tags_only
METHOD get_type. METHOD get_type.
DATA: lv_annotated_tag_with_suffix TYPE string.
FIELD-SYMBOLS: <ls_result> TYPE LINE OF stringtab.
rv_type = zif_abapgit_definitions=>c_git_branch_type-other. rv_type = zif_abapgit_definitions=>c_git_branch_type-other.
IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = zif_abapgit_definitions=>c_head_name. IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = zif_abapgit_definitions=>c_head_name.
@ -174,7 +195,17 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
ENDIF. ENDIF.
IF iv_branch_name CP 'refs/tags/*'. IF iv_branch_name CP 'refs/tags/*'.
rv_type = zif_abapgit_definitions=>c_git_branch_type-tag.
lv_annotated_tag_with_suffix = iv_branch_name && '^{}'.
READ TABLE it_result ASSIGNING <ls_result>
INDEX iv_current_row_index + 1.
IF sy-subrc = 0 AND <ls_result> CP '*' && lv_annotated_tag_with_suffix.
rv_type = zif_abapgit_definitions=>c_git_branch_type-annotated_tag.
ELSE.
rv_type = zif_abapgit_definitions=>c_git_branch_type-lightweight_tag.
ENDIF.
ENDIF. ENDIF.
ENDMETHOD. "get_type ENDMETHOD. "get_type
@ -206,12 +237,13 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
METHOD parse_branch_list. METHOD parse_branch_list.
DATA: lt_result TYPE TABLE OF string, DATA: lt_result TYPE TABLE OF string,
lv_hash TYPE zif_abapgit_definitions=>ty_sha1, lv_hash TYPE zif_abapgit_definitions=>ty_sha1,
lv_name TYPE string, lv_name TYPE string,
lv_head_params TYPE string, lv_head_params TYPE string,
lv_char TYPE c, lv_char TYPE c,
lv_data LIKE LINE OF lt_result. lv_data LIKE LINE OF lt_result,
lv_current_row_index TYPE syst-tabix.
FIELD-SYMBOLS: <ls_branch> LIKE LINE OF et_list. FIELD-SYMBOLS: <ls_branch> LIKE LINE OF et_list.
@ -220,6 +252,9 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
SPLIT iv_data AT zif_abapgit_definitions=>gc_newline INTO TABLE lt_result. SPLIT iv_data AT zif_abapgit_definitions=>gc_newline INTO TABLE lt_result.
LOOP AT lt_result INTO lv_data. LOOP AT lt_result INTO lv_data.
lv_current_row_index = sy-tabix.
IF sy-tabix = 1. IF sy-tabix = 1.
CONTINUE. " current loop CONTINUE. " current loop
ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49. ELSEIF sy-tabix = 2 AND strlen( lv_data ) > 49.
@ -245,7 +280,9 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
<ls_branch>-sha1 = lv_hash. <ls_branch>-sha1 = lv_hash.
<ls_branch>-name = lv_name. <ls_branch>-name = lv_name.
<ls_branch>-display_name = get_display_name( lv_name ). <ls_branch>-display_name = get_display_name( lv_name ).
<ls_branch>-type = get_type( lv_name ). <ls_branch>-type = get_type( iv_branch_name = lv_name
it_result = lt_result
iv_current_row_index = lv_current_row_index ).
IF <ls_branch>-name = zif_abapgit_definitions=>c_head_name OR <ls_branch>-name = ev_head_symref. IF <ls_branch>-name = zif_abapgit_definitions=>c_head_name OR <ls_branch>-name = ev_head_symref.
<ls_branch>-is_head = abap_true. <ls_branch>-is_head = abap_true.
ENDIF. ENDIF.
@ -266,4 +303,25 @@ CLASS ZCL_ABAPGIT_GIT_BRANCH_LIST IMPLEMENTATION.
ENDIF. ENDIF.
ENDMETHOD. "parse_head_params ENDMETHOD. "parse_head_params
METHOD find_tag_by_name.
DATA: lv_branch_name TYPE string.
lv_branch_name = iv_branch_name && '^{}'.
READ TABLE mt_branches INTO rs_branch
WITH KEY name = lv_branch_name.
IF sy-subrc <> 0.
READ TABLE mt_branches INTO rs_branch
WITH KEY name = iv_branch_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Branch not found' ).
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -20,7 +20,16 @@ CLASS zcl_abapgit_git_pack DEFINITION
author TYPE string, author TYPE string,
committer TYPE string, committer TYPE string,
body TYPE string, body TYPE string,
END OF ty_commit . END OF ty_commit,
BEGIN OF ty_tag,
object TYPE string,
type TYPE string,
tag TYPE string,
tagger_name TYPE string,
tagger_email TYPE string,
message TYPE string,
body TYPE string,
END OF ty_tag .
TYPES: TYPES:
BEGIN OF ty_adler32, BEGIN OF ty_adler32,
sha1 TYPE zif_abapgit_definitions=>ty_sha1, sha1 TYPE zif_abapgit_definitions=>ty_sha1,
@ -48,6 +57,13 @@ CLASS zcl_abapgit_git_pack DEFINITION
VALUE(rs_commit) TYPE ty_commit VALUE(rs_commit) TYPE ty_commit
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
CLASS-METHODS decode_tag
IMPORTING
!iv_data TYPE xstring
RETURNING
VALUE(rs_tag) TYPE ty_tag
RAISING
zcx_abapgit_exception .
CLASS-METHODS encode CLASS-METHODS encode
IMPORTING IMPORTING
!it_objects TYPE zif_abapgit_definitions=>ty_objects_tt !it_objects TYPE zif_abapgit_definitions=>ty_objects_tt
@ -62,9 +78,16 @@ CLASS zcl_abapgit_git_pack DEFINITION
VALUE(rv_data) TYPE xstring . VALUE(rv_data) TYPE xstring .
CLASS-METHODS encode_commit CLASS-METHODS encode_commit
IMPORTING IMPORTING
!is_commit TYPE ty_commit is_commit TYPE ty_commit
RETURNING RETURNING
VALUE(rv_data) TYPE xstring . VALUE(rv_data) TYPE xstring .
CLASS-METHODS encode_tag
IMPORTING
is_tag TYPE zcl_abapgit_git_pack=>ty_tag
RETURNING
VALUE(rv_data) TYPE xstring
RAISING
zcx_abapgit_exception.
PRIVATE SECTION. PRIVATE SECTION.
CONSTANTS: CONSTANTS:
@ -128,7 +151,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION. CLASS zcl_abapgit_git_pack IMPLEMENTATION.
METHOD decode. METHOD decode.
@ -336,6 +359,68 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
ENDMETHOD. "decode_deltas ENDMETHOD. "decode_deltas
METHOD decode_tag.
DATA: lv_string TYPE string,
lv_word TYPE string,
lv_length TYPE i,
lv_trash TYPE string ##NEEDED,
lt_string TYPE TABLE OF string.
FIELD-SYMBOLS: <lv_string> LIKE LINE OF lt_string.
lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( iv_data ).
SPLIT lv_string AT zif_abapgit_definitions=>gc_newline INTO TABLE lt_string.
LOOP AT lt_string ASSIGNING <lv_string>.
SPLIT <lv_string> AT space INTO lv_word lv_trash.
CASE lv_word.
WHEN 'object'.
rs_tag-object = lv_trash.
WHEN 'type'.
rs_tag-type = lv_trash.
WHEN 'tag'.
rs_tag-tag = lv_trash.
WHEN 'tagger'.
FIND FIRST OCCURRENCE OF REGEX `(.*)<(.*)>`
IN lv_trash
SUBMATCHES rs_tag-tagger_name
rs_tag-tagger_email.
rs_tag-tagger_name = condense( rs_tag-tagger_name ).
WHEN ''.
" ignore blank lines
CONTINUE.
WHEN OTHERS.
" these are the non empty line which don't start with a key word
" the first one is the message, the rest are cumulated to the body
IF rs_tag-message IS INITIAL.
rs_tag-message = <lv_string>.
ELSE.
IF rs_tag-body IS NOT INITIAL.
rs_tag-body = rs_tag-body && zif_abapgit_definitions=>gc_newline.
ENDIF.
rs_tag-body = rs_tag-body && <lv_string>.
ENDIF.
ENDCASE.
ENDLOOP.
ENDMETHOD.
METHOD decode_tree. METHOD decode_tree.
CONSTANTS: lc_sha_length TYPE i VALUE 20, CONSTANTS: lc_sha_length TYPE i VALUE 20,
@ -757,6 +842,8 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
lv_type = 32. lv_type = 32.
WHEN zif_abapgit_definitions=>gc_type-blob. WHEN zif_abapgit_definitions=>gc_type-blob.
lv_type = 48. lv_type = 48.
WHEN zif_abapgit_definitions=>gc_type-tag.
lv_type = 64.
WHEN zif_abapgit_definitions=>gc_type-ref_d. WHEN zif_abapgit_definitions=>gc_type-ref_d.
lv_type = 112. lv_type = 112.
WHEN OTHERS. WHEN OTHERS.
@ -839,4 +926,25 @@ CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Wrong Adler checksum' ). zcx_abapgit_exception=>raise( 'Wrong Adler checksum' ).
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
METHOD encode_tag.
DATA: lv_string TYPE string,
lv_tmp TYPE string,
lv_time TYPE zcl_abapgit_time=>ty_unixtime.
lv_time = zcl_abapgit_time=>get( ).
lv_string = |object { is_tag-object }{ zif_abapgit_definitions=>gc_newline }|
&& |type { is_tag-type }{ zif_abapgit_definitions=>gc_newline }|
&& |tag { zcl_abapgit_tag=>remove_tag_prefix( is_tag-tag ) }{ zif_abapgit_definitions=>gc_newline }|
&& |tagger { is_tag-tagger_name } <{ is_tag-tagger_email }> { lv_time }|
&& |{ zif_abapgit_definitions=>gc_newline }|
&& |{ zif_abapgit_definitions=>gc_newline }|
&& |{ is_tag-message }|.
rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -567,3 +567,60 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.
CLASS ltcl_tag DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
decode_tag FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_tag IMPLEMENTATION.
METHOD decode_tag.
DATA: lv_test_data TYPE string,
lv_xstring TYPE xstring,
ls_tag TYPE zcl_abapgit_git_pack=>ty_tag.
lv_test_data = |object 175f9a21b15a9012c97a3dd15aea6d74d4204b6b\n|
&& |type commit\n|
&& |tag tag_1\n|
&& |tagger Christian Guenter <christianguenter@googlemail.com> 1526718052 +0000\n|
&& |\n|
&& |This is an annotated tag\n|.
lv_xstring = zcl_abapgit_convert=>string_to_xstring_utf8( lv_test_data ).
ls_tag = zcl_abapgit_git_pack=>decode_tag( lv_xstring ).
cl_abap_unit_assert=>assert_equals(
exp = |175f9a21b15a9012c97a3dd15aea6d74d4204b6b|
act = ls_tag-object ).
cl_abap_unit_assert=>assert_equals(
exp = 'commit'
act = ls_tag-type ).
cl_abap_unit_assert=>assert_equals(
exp = 'tag_1'
act = ls_tag-tag ).
cl_abap_unit_assert=>assert_equals(
exp = 'Christian Guenter'
act = ls_tag-tagger_name ).
cl_abap_unit_assert=>assert_equals(
exp = 'christianguenter@googlemail.com'
act = ls_tag-tagger_email ).
cl_abap_unit_assert=>assert_equals(
exp = 'This is an annotated tag'
act = ls_tag-message ).
ENDMETHOD.
ENDCLASS.

View File

@ -33,8 +33,7 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
CLASS-METHODS create_tag CLASS-METHODS create_tag
IMPORTING IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online !io_repo TYPE REF TO zcl_abapgit_repo_online
!iv_name TYPE string is_tag TYPE zif_abapgit_definitions=>ty_git_tag
!iv_from TYPE zif_abapgit_definitions=>ty_sha1
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
CLASS-METHODS delete_branch CLASS-METHODS delete_branch
@ -46,7 +45,7 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
CLASS-METHODS delete_tag CLASS-METHODS delete_tag
IMPORTING IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online !io_repo TYPE REF TO zcl_abapgit_repo_online
!is_tag TYPE zif_abapgit_definitions=>ty_git_branch !is_tag TYPE zif_abapgit_definitions=>ty_git_tag
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
CLASS-METHODS full_tree CLASS-METHODS full_tree
@ -56,9 +55,9 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
RETURNING RETURNING
VALUE(rt_expanded) TYPE zif_abapgit_definitions=>ty_expanded_tt VALUE(rt_expanded) TYPE zif_abapgit_definitions=>ty_expanded_tt
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception.
PRIVATE SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_tree, TYPES: BEGIN OF ty_tree,
path TYPE string, path TYPE string,
data TYPE xstring, data TYPE xstring,
@ -100,7 +99,7 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
RETURNING VALUE(rt_expanded) TYPE zif_abapgit_definitions=>ty_expanded_tt RETURNING VALUE(rt_expanded) TYPE zif_abapgit_definitions=>ty_expanded_tt
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception.
CLASS-METHODS receive_pack CLASS-METHODS receive_pack_push
IMPORTING is_comment TYPE zif_abapgit_definitions=>ty_comment IMPORTING is_comment TYPE zif_abapgit_definitions=>ty_comment
io_repo TYPE REF TO zcl_abapgit_repo_online io_repo TYPE REF TO zcl_abapgit_repo_online
it_trees TYPE ty_trees_tt it_trees TYPE ty_trees_tt
@ -108,11 +107,31 @@ CLASS zcl_abapgit_git_porcelain DEFINITION
io_stage TYPE REF TO zcl_abapgit_stage io_stage TYPE REF TO zcl_abapgit_stage
RETURNING VALUE(rv_branch) TYPE zif_abapgit_definitions=>ty_sha1 RETURNING VALUE(rv_branch) TYPE zif_abapgit_definitions=>ty_sha1
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception.
CLASS-METHODS receive_pack_create_tag
IMPORTING is_tag TYPE zif_abapgit_definitions=>ty_git_tag
io_repo TYPE REF TO zcl_abapgit_repo_online
RAISING zcx_abapgit_exception.
CLASS-METHODS create_annotated_tag
IMPORTING
is_tag TYPE zif_abapgit_definitions=>ty_git_tag
io_repo TYPE REF TO zcl_abapgit_repo_online
RAISING
zcx_abapgit_exception.
CLASS-METHODS create_lightweight_tag
IMPORTING
is_tag TYPE zif_abapgit_definitions=>ty_git_tag
io_repo TYPE REF TO zcl_abapgit_repo_online
RAISING
zcx_abapgit_exception.
ENDCLASS. ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION. CLASS zcl_abapgit_git_porcelain IMPLEMENTATION.
METHOD build_trees. METHOD build_trees.
@ -199,23 +218,28 @@ CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
METHOD create_tag. METHOD create_tag.
DATA: lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt, IF is_tag-name CS ` `.
lv_pack TYPE xstring.
IF iv_name CS ` `.
zcx_abapgit_exception=>raise( 'Tag name cannot contain blank spaces' ). zcx_abapgit_exception=>raise( 'Tag name cannot contain blank spaces' ).
ENDIF. ENDIF.
* "client MUST send an empty packfile" CASE is_tag-type.
* https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514 WHEN zif_abapgit_definitions=>c_git_branch_type-annotated_tag.
lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ).
zcl_abapgit_git_transport=>receive_pack( create_annotated_tag(
iv_url = io_repo->get_url( ) is_tag = is_tag
iv_old = c_zero io_repo = io_repo ).
iv_new = iv_from
iv_branch_name = iv_name WHEN zif_abapgit_definitions=>c_git_branch_type-lightweight_tag.
iv_pack = lv_pack ).
create_lightweight_tag(
is_tag = is_tag
io_repo = io_repo ).
WHEN OTHERS.
zcx_abapgit_exception=>raise( |Invalid tag type: { is_tag-type }| ).
ENDCASE.
ENDMETHOD. ENDMETHOD.
@ -435,16 +459,60 @@ CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
lt_trees = build_trees( lt_expanded ). lt_trees = build_trees( lt_expanded ).
ev_branch = receive_pack( is_comment = is_comment ev_branch = receive_pack_push( is_comment = is_comment
io_repo = io_repo io_repo = io_repo
it_trees = lt_trees it_trees = lt_trees
it_blobs = lt_blobs it_blobs = lt_blobs
io_stage = io_stage ). io_stage = io_stage ).
ENDMETHOD. "push ENDMETHOD. "push
METHOD receive_pack. METHOD receive_pack_create_tag.
DATA: lv_tag TYPE xstring,
lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
lv_pack TYPE xstring,
ls_object LIKE LINE OF lt_objects,
ls_tag TYPE zcl_abapgit_git_pack=>ty_tag,
lv_new_tag_sha1 TYPE zif_abapgit_definitions=>ty_sha1.
* new tag
ls_tag-object = is_tag-sha1.
ls_tag-type = zif_abapgit_definitions=>gc_type-commit.
ls_tag-tag = is_tag-name.
ls_tag-tagger_name = is_tag-tagger_name.
ls_tag-tagger_email = is_tag-tagger_email.
ls_tag-message = is_tag-message
&& |{ zif_abapgit_definitions=>gc_newline }|
&& |{ zif_abapgit_definitions=>gc_newline }|
&& is_tag-body.
lv_tag = zcl_abapgit_git_pack=>encode_tag( ls_tag ).
lv_new_tag_sha1 = zcl_abapgit_hash=>sha1(
iv_type = zif_abapgit_definitions=>gc_type-tag
iv_data = lv_tag ).
CLEAR ls_object.
ls_object-sha1 = lv_new_tag_sha1.
ls_object-type = zif_abapgit_definitions=>gc_type-tag.
ls_object-data = lv_tag.
APPEND ls_object TO lt_objects.
lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ).
zcl_abapgit_git_transport=>receive_pack(
iv_url = io_repo->get_url( )
iv_old = c_zero
iv_new = lv_new_tag_sha1
iv_branch_name = is_tag-name
iv_pack = lv_pack ).
ENDMETHOD.
METHOD receive_pack_push.
DATA: lv_time TYPE zcl_abapgit_time=>ty_unixtime, DATA: lv_time TYPE zcl_abapgit_time=>ty_unixtime,
lv_commit TYPE xstring, lv_commit TYPE xstring,
@ -630,4 +698,32 @@ CLASS ZCL_ABAPGIT_GIT_PORCELAIN IMPLEMENTATION.
ENDLOOP. ENDLOOP.
ENDMETHOD. ENDMETHOD.
METHOD create_annotated_tag.
receive_pack_create_tag(
is_tag = is_tag
io_repo = io_repo ).
ENDMETHOD.
METHOD create_lightweight_tag.
DATA: lt_objects TYPE zif_abapgit_definitions=>ty_objects_tt,
lv_pack TYPE xstring.
* "client MUST send an empty packfile"
* https://github.com/git/git/blob/master/Documentation/technical/pack-protocol.txt#L514
lv_pack = zcl_abapgit_git_pack=>encode( lt_objects ).
zcl_abapgit_git_transport=>receive_pack(
iv_url = io_repo->get_url( )
iv_old = c_zero
iv_new = io_repo->get_sha1_local( )
iv_branch_name = is_tag-name
iv_pack = lv_pack ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -57,7 +57,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GIT_TRANSPORT IMPLEMENTATION. CLASS zcl_abapgit_git_transport IMPLEMENTATION.
METHOD branches. METHOD branches.
@ -209,6 +209,8 @@ CLASS ZCL_ABAPGIT_GIT_TRANSPORT IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'funny refname' ). zcx_abapgit_exception=>raise( 'funny refname' ).
ELSEIF lv_string CP '*failed to update ref*'. ELSEIF lv_string CP '*failed to update ref*'.
zcx_abapgit_exception=>raise( 'failed to update ref' ). zcx_abapgit_exception=>raise( 'failed to update ref' ).
ELSEIF lv_string CP '*missing necessary objects*'.
zcx_abapgit_exception=>raise( 'missing necessary objects' ).
ENDIF. ENDIF.
ENDMETHOD. "receive_pack ENDMETHOD. "receive_pack

View File

@ -7,21 +7,22 @@ CLASS zcl_abapgit_tag DEFINITION
CLASS-METHODS: CLASS-METHODS:
add_tag_prefix add_tag_prefix
IMPORTING IMPORTING
!iv_text TYPE csequence iv_text TYPE csequence
RETURNING RETURNING
VALUE(rv_text) TYPE string, VALUE(rv_text) TYPE string,
remove_tag_prefix remove_tag_prefix
IMPORTING IMPORTING
!iv_text TYPE string iv_text TYPE string
RETURNING RETURNING
VALUE(rv_text) TYPE string . VALUE(rv_text) TYPE string.
ENDCLASS. ENDCLASS.
CLASS zcl_abapgit_tag IMPLEMENTATION. CLASS ZCL_ABAPGIT_TAG IMPLEMENTATION.
METHOD add_tag_prefix. METHOD add_tag_prefix.
@ -39,5 +40,4 @@ CLASS zcl_abapgit_tag IMPLEMENTATION.
WITH ''. WITH ''.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -62,6 +62,7 @@ CLASS ZCL_ABAPGIT_2FA_AUTH_REGISTRY IMPLEMENTATION.
TRY. TRY.
lo_class ?= cl_oo_class=>get_instance( 'ZCL_ABAPGIT_2FA_AUTH_BASE' ). lo_class ?= cl_oo_class=>get_instance( 'ZCL_ABAPGIT_2FA_AUTH_BASE' ).
lt_sub = lo_class->get_subclasses( ). lt_sub = lo_class->get_subclasses( ).
SORT lt_sub BY clsname ASCENDING AS TEXT.
LOOP AT lt_sub INTO ls_sub. LOOP AT lt_sub INTO ls_sub.
CREATE OBJECT li_authenticator TYPE (ls_sub-clsname). CREATE OBJECT li_authenticator TYPE (ls_sub-clsname).
INSERT li_authenticator INTO TABLE gt_registered_authenticators. INSERT li_authenticator INTO TABLE gt_registered_authenticators.

View File

@ -60,7 +60,7 @@ ENDCLASS.
CLASS zcl_abapgit_2fa_github_auth IMPLEMENTATION. CLASS ZCL_ABAPGIT_2FA_GITHUB_AUTH IMPLEMENTATION.
METHOD constructor. METHOD constructor.
@ -336,6 +336,8 @@ CLASS zcl_abapgit_2fa_github_auth IMPLEMENTATION.
li_client->receive( EXCEPTIONS OTHERS = 1 ). li_client->receive( EXCEPTIONS OTHERS = 1 ).
IF sy-subrc <> 0. IF sy-subrc <> 0.
* if the code fails here with a SSL error, make sure STRUST is setup to
* work with https://api.github.com
raise_comm_error_from_sy( ). raise_comm_error_from_sy( ).
ENDIF. ENDIF.

View File

@ -205,7 +205,8 @@ CLASS ZCL_ABAPGIT_HTTP IMPLEMENTATION.
METHOD get_agent. METHOD get_agent.
* bitbucket require agent prefix = "git/" * bitbucket require agent prefix = "git/"
rv_agent = 'git/abapGit-' && zif_abapgit_definitions=>gc_abap_version. * also see https://github.com/larshp/abapGit/issues/1432
rv_agent = |git/2.0 (abapGit { zif_abapgit_definitions=>gc_abap_version })|.
ENDMETHOD. ENDMETHOD.

View File

@ -28,7 +28,7 @@ ENDCLASS.
CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION. CLASS ZCL_ABAPGIT_ECATT_SP_UPLOAD IMPLEMENTATION.
METHOD get_ecatt_sp. METHOD get_ecatt_sp.
@ -46,8 +46,7 @@ CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION.
FIELD-SYMBOLS: <ecatt_object> TYPE any. FIELD-SYMBOLS: <ecatt_object> TYPE any.
TRY. TRY.
li_section = template_over_all->find_from_name_ns( li_section = template_over_all->find_from_name_ns( 'START_PROFILE' ).
name = 'START_PROFILE' ).
IF NOT li_section IS INITIAL. IF NOT li_section IS INITIAL.
CLASS cl_ixml DEFINITION LOAD . CLASS cl_ixml DEFINITION LOAD .
@ -75,7 +74,7 @@ CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION.
lv_exception_occurred = 'X'. lv_exception_occurred = 'X'.
ENDTRY. ENDTRY.
IF lv_exception_occurred = 'X'. IF lv_exception_occurred = 'X'.
raise_upload_exception( previous = exception_to_raise ). raise_upload_exception( previous = exception_to_raise ).
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
@ -107,7 +106,7 @@ CLASS zcl_abapgit_ecatt_sp_upload IMPLEMENTATION.
CHANGING CHANGING
ch_object = ch_object ). ch_object = ch_object ).
upload_data_from_stream( im_xml_file = ch_object-filename ). upload_data_from_stream( ch_object-filename ).
CATCH cx_ecatt_apl INTO lx_ecatt. CATCH cx_ecatt_apl INTO lx_ecatt.
IF template_over_all IS INITIAL. IF template_over_all IS INITIAL.

View File

@ -46,7 +46,10 @@ CLASS zcl_abapgit_ecatt_val_obj_down DEFINITION
ENDCLASS. ENDCLASS.
CLASS zcl_abapgit_ecatt_val_obj_down IMPLEMENTATION.
CLASS ZCL_ABAPGIT_ECATT_VAL_OBJ_DOWN IMPLEMENTATION.
METHOD download. METHOD download.
@ -90,7 +93,7 @@ CLASS zcl_abapgit_ecatt_val_obj_down IMPLEMENTATION.
ENDIF. ENDIF.
ENDLOOP. ENDLOOP.
set_variants_to_dom( im_params = ecatt_vo->params ). set_variants_to_dom( ecatt_vo->params ).
download_data( ). download_data( ).

View File

@ -47,7 +47,7 @@ ENDCLASS.
CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION. CLASS ZCL_ABAPGIT_ECATT_VAL_OBJ_UPL IMPLEMENTATION.
METHOD get_business_msgs_from_dom. METHOD get_business_msgs_from_dom.
@ -90,7 +90,7 @@ CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
lv_exception_occurred = 'X'. lv_exception_occurred = 'X'.
ENDTRY. ENDTRY.
IF lv_exception_occurred = 'X'. IF lv_exception_occurred = 'X'.
raise_upload_exception( previous = exception_to_raise ). raise_upload_exception( previous = exception_to_raise ).
ENDIF. ENDIF.
@ -108,7 +108,7 @@ CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
FIELD-SYMBOLS: <ecatt_vo> TYPE any. FIELD-SYMBOLS: <ecatt_vo> TYPE any.
li_section = template_over_all->find_from_name_ns( name = 'IMPL_DET' ). li_section = template_over_all->find_from_name_ns( 'IMPL_DET' ).
IF NOT li_section IS INITIAL. IF NOT li_section IS INITIAL.
CALL FUNCTION 'SDIXML_DOM_TO_DATA' CALL FUNCTION 'SDIXML_DOM_TO_DATA'
@ -137,7 +137,7 @@ CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
lv_exception_occurred = 'X'. lv_exception_occurred = 'X'.
ENDTRY. ENDTRY.
IF lv_exception_occurred = 'X'. IF lv_exception_occurred = 'X'.
raise_upload_exception( previous = exception_to_raise ). raise_upload_exception( previous = exception_to_raise ).
ENDIF. ENDIF.
@ -210,7 +210,7 @@ CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
lv_exception_occurred = 'X'. lv_exception_occurred = 'X'.
ENDTRY. ENDTRY.
IF lv_exception_occurred = 'X'. IF lv_exception_occurred = 'X'.
raise_upload_exception( previous = exception_to_raise ). raise_upload_exception( previous = exception_to_raise ).
ENDIF. ENDIF.
@ -244,7 +244,7 @@ CLASS zcl_abapgit_ecatt_val_obj_upl IMPLEMENTATION.
CHANGING CHANGING
ch_object = ch_object ). ch_object = ch_object ).
upload_data_from_stream( im_xml_file = ch_object-filename ). upload_data_from_stream( ch_object-filename ).
CATCH cx_ecatt_apl INTO ex. CATCH cx_ecatt_apl INTO ex.
IF template_over_all IS INITIAL. IF template_over_all IS INITIAL.
RAISE EXCEPTION ex. RAISE EXCEPTION ex.

View File

@ -139,4 +139,10 @@ CLASS zcl_abapgit_object_acid IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_acid IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_acid IMPLEMENTATION

View File

@ -8,7 +8,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_AUTH IMPLEMENTATION. CLASS zcl_abapgit_object_auth IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by. METHOD zif_abapgit_object~changed_by.
@ -127,4 +127,11 @@ CLASS ZCL_ABAPGIT_OBJECT_AUTH IMPLEMENTATION.
ig_data = ls_authx ). ig_data = ls_authx ).
ENDMETHOD. "zif_abapgit_object~serialize ENDMETHOD. "zif_abapgit_object~serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -0,0 +1,254 @@
CLASS zcl_abapgit_object_char DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_objects_super
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES zif_abapgit_object .
PRIVATE SECTION.
TYPES:
BEGIN OF ty_char,
cls_attribute TYPE cls_attribute,
cls_attributet TYPE STANDARD TABLE OF cls_attributet WITH DEFAULT KEY,
cls_attr_value TYPE STANDARD TABLE OF cls_attr_value WITH DEFAULT KEY,
cls_attr_valuet TYPE STANDARD TABLE OF cls_attr_valuet WITH DEFAULT KEY,
END OF ty_char .
METHODS instantiate_char
IMPORTING
!iv_type_group TYPE cls_object_type_group
RETURNING
VALUE(ro_char) TYPE REF TO cl_cls_attribute
RAISING
zcx_abapgit_exception .
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_CHAR IMPLEMENTATION.
METHOD instantiate_char.
DATA: lv_new TYPE abap_bool,
lv_name TYPE cls_attribute_name.
SELECT SINGLE name FROM cls_attribute INTO lv_name WHERE name = ms_item-obj_name.
lv_new = boolc( sy-subrc <> 0 ).
lv_name = ms_item-obj_name.
TRY.
CREATE OBJECT ro_char
EXPORTING
im_name = lv_name
im_type_group = iv_type_group
im_new = lv_new.
CATCH cx_pak_invalid_data
cx_pak_not_authorized
cx_pak_invalid_state
cx_pak_wb_object_locked.
zcx_abapgit_exception=>raise( 'Error while instantiating CL_CLS_ATTRIBUTE' ).
ENDTRY.
IF lv_new = abap_false.
TRY.
ro_char->if_pak_wb_object~lock_and_refresh( ).
CATCH cx_pak_wb_object_locked.
zcx_abapgit_exception=>raise( |Could not aquire lock, CHAR { lv_name }| ).
ENDTRY.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
SELECT SINGLE changed_by FROM cls_attribute INTO rv_user
WHERE name = ms_item-obj_name
AND activation_state = 'A'.
IF rv_user IS INITIAL.
SELECT SINGLE created_by FROM cls_attribute INTO rv_user
WHERE name = ms_item-obj_name
AND activation_state = 'A'.
ENDIF.
IF rv_user IS INITIAL.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
DATA: lo_char TYPE REF TO cl_cls_attribute,
lv_type_group TYPE cls_attribute-type_group.
SELECT SINGLE type_group FROM cls_attribute INTO lv_type_group
WHERE name = ms_item-obj_name
AND activation_state = 'A'.
lo_char = instantiate_char( lv_type_group ).
lo_char->if_pak_wb_object~delete( ).
lo_char->if_pak_wb_object~save( ).
lo_char->if_pak_wb_object_internal~unlock( ).
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_char TYPE ty_char,
lv_request TYPE trkorr,
ls_description LIKE LINE OF ls_char-cls_attributet,
lo_char TYPE REF TO cl_cls_attribute.
io_xml->read( EXPORTING iv_name = 'CHAR'
CHANGING cg_data = ls_char ).
tadir_insert( iv_package ).
lo_char = instantiate_char( ls_char-cls_attribute-type_group ).
lo_char->if_cls_attribute~set_kind( ls_char-cls_attribute-kind ).
lo_char->if_cls_attribute~set_single_valued( ls_char-cls_attribute-is_single_valued ).
lo_char->if_cls_attribute~set_aspect(
im_aspect_for = ls_char-cls_attribute-is_aspect_for
im_aspect_value = ls_char-cls_attribute-aspect_value ).
lo_char->if_cls_attribute~set_default_flag( ls_char-cls_attribute-default_flag ).
lo_char->if_cls_attribute~set_default_value( ls_char-cls_attribute-default_value ).
lo_char->if_cls_attribute~set_sub_object_treatment( ls_char-cls_attribute-sub_obj_treatm ).
lo_char->if_cls_attribute~set_automatic_changes_allowed( ls_char-cls_attribute-automatic_change ).
lo_char->if_cls_attribute~set_manual_changes_allowed( ls_char-cls_attribute-manu_chag_allow ).
lo_char->if_cls_attribute~set_implicit_changes_allowed( ls_char-cls_attribute-implicit_change ).
lo_char->if_cls_attribute~set_expl_values_dominate_links( ls_char-cls_attribute-weak_links ).
lo_char->if_cls_attribute~set_assignment_package_rule( ls_char-cls_attribute-assignment_devc ).
lo_char->if_cls_attribute~set_hide_remark( ls_char-cls_attribute-hide_remark ).
lo_char->if_cls_attribute~set_visible_in_customer_system( ls_char-cls_attribute-visible_for_cust ).
lo_char->if_cls_attribute~set_value_table( ls_char-cls_attribute-value_table ).
lo_char->if_cls_attribute~set_vtable_field( ls_char-cls_attribute-vtable_field ).
lo_char->if_cls_attribute~set_vtable_icon_f( ls_char-cls_attribute-vtable_icon_f ).
lo_char->if_cls_attribute~set_vtext_langu_f( ls_char-cls_attribute-vtext_langu_f ).
lo_char->if_cls_attribute~set_vtext_table( ls_char-cls_attribute-vtext_table ).
lo_char->if_cls_attribute~set_vtext_text_f( ls_char-cls_attribute-vtext_text_f ).
lo_char->if_cls_attribute~set_vtext_value_f( ls_char-cls_attribute-vtext_value_f ).
lo_char->if_cls_attribute~set_existing_objects_only( ls_char-cls_attribute-existing_objects ).
lo_char->if_cls_attribute~set_objs_of_typegr( ls_char-cls_attribute-objs_of_typegr ).
lo_char->if_cls_attribute~set_obj_values_have_subtypes( ls_char-cls_attribute-objs_w_subtype ).
lo_char->if_cls_attribute~set_arbtry_val_type( ls_char-cls_attribute-arbtry_val_type ).
READ TABLE ls_char-cls_attributet INTO ls_description WITH KEY langu = sy-langu.
IF sy-subrc <> 0.
READ TABLE ls_char-cls_attributet INTO ls_description INDEX 1.
ENDIF.
lo_char->if_cls_attribute~set_description( ls_description-text ).
lo_char->if_cls_attribute~set_values(
im_values = ls_char-cls_attr_value
im_values_t = ls_char-cls_attr_valuet ).
* set default package, see function module RS_CORR_INSERT
SET PARAMETER ID 'EUK' FIELD iv_package.
lo_char->if_pak_wb_object~save( ).
SET PARAMETER ID 'EUK' FIELD ''.
lo_char->if_pak_wb_object~activate( ).
lo_char->if_pak_wb_object_internal~unlock( ).
ENDMETHOD.
METHOD zif_abapgit_object~exists.
rv_bool = cl_cls_attribute=>exists_object_attribute( ms_item-obj_name ).
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS'
EXPORTING
operation = 'SHOW'
object_name = ms_item-obj_name
object_type = ms_item-obj_type
EXCEPTIONS
not_executed = 1
invalid_object_type = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error from RS_TOOL_ACCESS, CHAR| ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_char TYPE ty_char.
CONSTANTS: lc_active TYPE c LENGTH 1 VALUE 'A'.
SELECT SINGLE * FROM cls_attribute INTO ls_char-cls_attribute
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
* todo, ASSIGNMENT_DEVC?
CLEAR: ls_char-cls_attribute-created_by,
ls_char-cls_attribute-created_on,
ls_char-cls_attribute-changed_by,
ls_char-cls_attribute-changed_on.
SELECT * FROM cls_attributet INTO TABLE ls_char-cls_attributet
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
SELECT * FROM cls_attr_value INTO TABLE ls_char-cls_attr_value
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
SELECT * FROM cls_attr_valuet INTO TABLE ls_char-cls_attr_valuet
WHERE name = ms_item-obj_name
AND activation_state = lc_active.
io_xml->add( iv_name = 'CHAR'
ig_data = ls_char ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_CHAR</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -30,12 +30,17 @@ CLASS zcl_abapgit_object_clas_old DEFINITION PUBLIC INHERITING FROM zcl_abapgit_
serialize_xml serialize_xml
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception.
PRIVATE SECTION.
METHODS:
is_class_locked
RETURNING VALUE(rv_is_class_locked) TYPE abap_bool
RAISING zcx_abapgit_exception.
ENDCLASS. ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION. CLASS zcl_abapgit_object_clas_old IMPLEMENTATION.
METHOD constructor. METHOD constructor.
@ -114,7 +119,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'LINES' io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ). CHANGING cg_data = lt_lines ).
IF lt_lines[] IS INITIAL. IF lines( lt_lines ) = 0.
RETURN. RETURN.
ENDIF. ENDIF.
@ -155,7 +160,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
CHANGING cg_data = lt_tpool_ext ). CHANGING cg_data = lt_tpool_ext ).
lt_tpool = read_tpool( lt_tpool_ext ). lt_tpool = read_tpool( lt_tpool_ext ).
IF lt_tpool[] IS INITIAL. IF lines( lt_tpool ) = 0.
RETURN. RETURN.
ENDIF. ENDIF.
@ -186,7 +191,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
zcl_abapgit_language=>set_current_language( mv_language ). zcl_abapgit_language=>set_current_language( mv_language ).
TRY. TRY.
ls_vseoclass = mo_object_oriented_object_fct->get_class_properties( is_class_key = ls_clskey ). ls_vseoclass = mo_object_oriented_object_fct->get_class_properties( ls_clskey ).
CLEANUP. CLEANUP.
zcl_abapgit_language=>restore_login_language( ). zcl_abapgit_language=>restore_login_language( ).
@ -308,7 +313,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
DATA: ls_class_key TYPE seoclskey. DATA: ls_class_key TYPE seoclskey.
ls_class_key-clsname = ms_item-obj_name. ls_class_key-clsname = ms_item-obj_name.
rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ). rv_bool = mo_object_oriented_object_fct->exists( ls_class_key ).
ENDMETHOD. "zif_abapgit_object~exists ENDMETHOD. "zif_abapgit_object~exists
@ -374,7 +379,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
lt_source = mo_object_oriented_object_fct->serialize_abap( lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key is_class_key = ls_class_key
iv_type = seop_ext_class_locals_def ). iv_type = seop_ext_class_locals_def ).
IF NOT lt_source[] IS INITIAL. IF lines( lt_source ) > 0.
mo_files->add_abap( iv_extra = 'locals_def' mo_files->add_abap( iv_extra = 'locals_def'
it_abap = lt_source ). "#EC NOTEXT it_abap = lt_source ). "#EC NOTEXT
ENDIF. ENDIF.
@ -382,7 +387,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
lt_source = mo_object_oriented_object_fct->serialize_abap( lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key is_class_key = ls_class_key
iv_type = seop_ext_class_locals_imp ). iv_type = seop_ext_class_locals_imp ).
IF NOT lt_source[] IS INITIAL. IF lines( lt_source ) > 0.
mo_files->add_abap( iv_extra = 'locals_imp' mo_files->add_abap( iv_extra = 'locals_imp'
it_abap = lt_source ). "#EC NOTEXT it_abap = lt_source ). "#EC NOTEXT
ENDIF. ENDIF.
@ -392,7 +397,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
iv_type = seop_ext_class_testclasses ). iv_type = seop_ext_class_testclasses ).
mv_skip_testclass = mo_object_oriented_object_fct->get_skip_test_classes( ). mv_skip_testclass = mo_object_oriented_object_fct->get_skip_test_classes( ).
IF NOT lt_source[] IS INITIAL AND mv_skip_testclass = abap_false. IF lines( lt_source ) > 0 AND mv_skip_testclass = abap_false.
mo_files->add_abap( iv_extra = 'testclasses' mo_files->add_abap( iv_extra = 'testclasses'
it_abap = lt_source ). "#EC NOTEXT it_abap = lt_source ). "#EC NOTEXT
ENDIF. ENDIF.
@ -400,7 +405,7 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
lt_source = mo_object_oriented_object_fct->serialize_abap( lt_source = mo_object_oriented_object_fct->serialize_abap(
is_class_key = ls_class_key is_class_key = ls_class_key
iv_type = seop_ext_class_macros ). iv_type = seop_ext_class_macros ).
IF NOT lt_source[] IS INITIAL. IF lines( lt_source ) > 0.
mo_files->add_abap( iv_extra = 'macros' mo_files->add_abap( iv_extra = 'macros'
it_abap = lt_source ). "#EC NOTEXT it_abap = lt_source ). "#EC NOTEXT
ENDIF. ENDIF.
@ -408,4 +413,44 @@ CLASS ZCL_ABAPGIT_OBJECT_CLAS_OLD IMPLEMENTATION.
serialize_xml( io_xml ). serialize_xml( io_xml ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
DATA: lv_classpool TYPE program.
lv_classpool = cl_oo_classname_service=>get_classpool_name( |{ ms_item-obj_name }| ).
IF is_class_locked( ) = abap_true
OR is_text_locked( lv_classpool ) = abap_true.
rv_is_locked = abap_true.
ENDIF.
ENDMETHOD.
METHOD is_class_locked.
DATA: lv_clsname TYPE seoclsenq-clsname.
lv_clsname = ms_item-obj_name.
OVERLAY lv_clsname WITH '=============================='.
CALL FUNCTION 'ENQUEUE_ESEOCLASS'
EXPORTING
clsname = lv_clsname
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
rv_is_class_locked = boolc( sy-subrc <> 0 ).
CALL FUNCTION 'DEQUEUE_ESEOCLASS'
EXPORTING
clsname = lv_clsname.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -214,6 +214,12 @@ CLASS ZCL_ABAPGIT_OBJECT_CMPT IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'CMPT not supported' ). zcx_abapgit_exception=>raise( 'CMPT not supported' ).
ENDTRY. ENDTRY.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -140,4 +140,10 @@ CLASS zcl_abapgit_object_cus0 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_cus0 IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_cus0 IMPLEMENTATION

View File

@ -152,4 +152,10 @@ CLASS zcl_abapgit_object_cus1 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_cus1 IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_cus1 IMPLEMENTATION

View File

@ -145,4 +145,10 @@ CLASS zcl_abapgit_object_cus2 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_cus2 IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_cus2 IMPLEMENTATION

View File

@ -8,7 +8,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DCLS IMPLEMENTATION. CLASS zcl_abapgit_object_dcls IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by. METHOD zif_abapgit_object~changed_by.
@ -194,4 +194,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DCLS IMPLEMENTATION.
ENDTRY. ENDTRY.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_ACMDCLSRC'
iv_argument = |{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -238,8 +238,7 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
CASE lv_ddtypekind. CASE lv_ddtypekind.
WHEN 'STOB'. WHEN 'STOB'.
me->open_adt_stob( ms_item-obj_name ).
me->open_adt_stob( iv_ddls_name = ms_item-obj_name ).
WHEN OTHERS. WHEN OTHERS.
zcx_abapgit_exception=>raise( 'DDLS Jump Error' ). zcx_abapgit_exception=>raise( 'DDLS Jump Error' ).
ENDCASE. ENDCASE.
@ -249,12 +248,13 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
METHOD zif_abapgit_object~serialize. METHOD zif_abapgit_object~serialize.
DATA: lo_ddl TYPE REF TO object, DATA: lo_ddl TYPE REF TO object,
lr_data TYPE REF TO data, lr_data TYPE REF TO data,
lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY. lt_clr_comps TYPE STANDARD TABLE OF fieldname WITH DEFAULT KEY.
FIELD-SYMBOLS: <lg_data> TYPE any, FIELD-SYMBOLS: <lg_data> TYPE any,
<lg_field> TYPE any. <lg_field> TYPE any,
<lv_comp> LIKE LINE OF lt_clr_comps.
CREATE DATA lr_data TYPE ('DDDDLSRCV'). CREATE DATA lr_data TYPE ('DDDDLSRCV').
@ -281,10 +281,11 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
APPEND 'ACTFLAG' TO lt_clr_comps. APPEND 'ACTFLAG' TO lt_clr_comps.
APPEND 'CHGFLAG' TO lt_clr_comps. APPEND 'CHGFLAG' TO lt_clr_comps.
LOOP AT lt_clr_comps ASSIGNING field-symbol(<lv_comp>). LOOP AT lt_clr_comps ASSIGNING <lv_comp>.
ASSIGN COMPONENT <lv_comp> OF STRUCTURE <lg_data> TO <lg_field>. ASSIGN COMPONENT <lv_comp> OF STRUCTURE <lg_data> TO <lg_field>.
ASSERT sy-subrc = 0. IF sy-subrc = 0.
CLEAR <lg_field>. CLEAR <lg_field>.
ENDIF.
ENDLOOP. ENDLOOP.
ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>. ASSIGN COMPONENT 'SOURCE' OF STRUCTURE <lg_data> TO <lg_field>.
@ -299,4 +300,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLS IMPLEMENTATION.
ig_data = <lg_data> ). ig_data = <lg_data> ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -28,7 +28,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION. CLASS zcl_abapgit_object_ddlx IMPLEMENTATION.
METHOD clear_field. METHOD clear_field.
@ -254,4 +254,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DDLX IMPLEMENTATION.
ENDTRY. ENDTRY.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -20,7 +20,16 @@ CLASS zcl_abapgit_object_devc DEFINITION PUBLIC
RAISING zcx_abapgit_exception, RAISING zcx_abapgit_exception,
set_lock IMPORTING ii_package TYPE REF TO if_package set_lock IMPORTING ii_package TYPE REF TO if_package
iv_lock TYPE abap_bool iv_lock TYPE abap_bool
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception,
is_empty
IMPORTING iv_package_name TYPE devclass
RETURNING VALUE(rv_is_empty) TYPE abap_bool
RAISING zcx_abapgit_exception,
load_package
IMPORTING iv_package_name TYPE devclass
RETURNING VALUE(ri_package) TYPE REF TO if_package
RAISING zcx_abapgit_exception.
DATA: DATA:
mv_local_devclass TYPE devclass. mv_local_devclass TYPE devclass.
ENDCLASS. ENDCLASS.
@ -39,24 +48,7 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
METHOD get_package. METHOD get_package.
IF me->zif_abapgit_object~exists( ) = abap_true. IF me->zif_abapgit_object~exists( ) = abap_true.
cl_package_factory=>load_package( ri_package = load_package( mv_local_devclass ).
EXPORTING
i_package_name = mv_local_devclass
i_force_reload = abap_true
IMPORTING
e_package = ri_package
EXCEPTIONS
object_not_existing = 1
unexpected_error = 2
intern_err = 3
no_access = 4
object_locked_and_modified = 5
OTHERS = 6 ).
IF sy-subrc = 1.
RETURN.
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
@ -209,12 +201,83 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
METHOD zif_abapgit_object~delete. METHOD zif_abapgit_object~delete.
DATA: li_package TYPE REF TO if_package,
lv_package TYPE devclass.
" Package deletion is a bit tricky. A package can only be deleted if there are no objects " Package deletion is a bit tricky. A package can only be deleted if there are no objects
" contained in it. This includes subpackages, so first the leaf packages need to be deleted. " contained in it. This includes subpackages, so first the leaf packages need to be deleted.
" Unfortunately deleted objects that are still contained in an unreleased transport request " Unfortunately deleted objects that are still contained in an unreleased transport request
" also count towards the contained objects counter. " also count towards the contained objects counter.
" -> Package deletion is currently not supported by abapGit " -> Currently we delete only empty packages
RETURN. "
" If objects are deleted, the TADIR entry is deleted when the transport request is released.
" So before we can delete the package, the transport which deletes the objects
" in the package has to be released.
lv_package = ms_item-obj_name.
IF is_empty( lv_package ) = abap_true.
li_package = load_package( lv_package ).
IF li_package IS NOT BOUND.
RETURN.
ENDIF.
li_package->set_changeable(
EXPORTING
i_changeable = abap_true
i_suppress_dialog = abap_true
EXCEPTIONS
object_locked_by_other_user = 1
permission_failure = 2
object_already_changeable = 3
object_already_unlocked = 4
object_just_created = 5
object_deleted = 6
object_modified = 7
object_not_existing = 8
object_invalid = 9
unexpected_error = 10
OTHERS = 11 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
li_package->delete(
EXPORTING
i_suppress_dialog = abap_true
EXCEPTIONS
object_not_empty = 1
object_not_changeable = 2
object_invalid = 3
intern_err = 4
OTHERS = 5 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
li_package->save(
EXPORTING
i_suppress_dialog = abap_true
EXCEPTIONS
object_invalid = 1
object_not_changeable = 2
cancelled_in_corr = 3
permission_failure = 4
unexpected_error = 5
intern_err = 6
OTHERS = 7 ).
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDIF.
ENDMETHOD. ENDMETHOD.
@ -544,4 +607,65 @@ CLASS zcl_abapgit_object_devc IMPLEMENTATION.
io_xml->add( iv_name = 'PERMISSION' ig_data = lt_usage_data ). io_xml->add( iv_name = 'PERMISSION' ig_data = lt_usage_data ).
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE eqegraarg .
lv_object = |DV{ ms_item-obj_name }|.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB'
iv_argument = lv_object ).
ENDMETHOD.
METHOD is_empty.
DATA: lv_object_name TYPE tadir-obj_name,
lt_subpackages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
lt_subpackages = zcl_abapgit_factory=>get_sap_package( iv_package_name )->list_subpackages( ).
IF lines( lt_subpackages ) > 0.
rv_is_empty = abap_false.
RETURN.
ENDIF.
SELECT SINGLE obj_name
FROM tadir
INTO lv_object_name
WHERE pgmid = 'R3TR'
AND NOT ( object = 'DEVC' AND obj_name = iv_package_name )
AND devclass = iv_package_name.
rv_is_empty = boolc( sy-subrc <> 0 ).
ENDMETHOD.
METHOD load_package.
cl_package_factory=>load_package(
EXPORTING
i_package_name = iv_package_name
i_force_reload = abap_true
IMPORTING
e_package = ri_package
EXCEPTIONS
object_not_existing = 1
unexpected_error = 2
intern_err = 3
no_access = 4
object_locked_and_modified = 5
OTHERS = 6 ).
IF sy-subrc = 1.
RETURN.
ELSEIF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -206,4 +206,11 @@ CLASS ZCL_ABAPGIT_OBJECT_DIAL IMPLEMENTATION.
WHERE dnam = lv_dnam. WHERE dnam = lv_dnam.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -191,4 +191,10 @@ CLASS zcl_abapgit_object_doct IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION

View File

@ -153,4 +153,10 @@ CLASS zcl_abapgit_object_docv IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION

View File

@ -36,7 +36,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION. CLASS zcl_abapgit_object_doma IMPLEMENTATION.
METHOD deserialize_texts. METHOD deserialize_texts.
@ -205,20 +205,40 @@ CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
lv_objname = ms_item-obj_name. lv_objname = ms_item-obj_name.
CALL FUNCTION 'RS_DD_DELETE_OBJ' TRY.
EXPORTING CALL FUNCTION 'RS_DD_DELETE_OBJ'
no_ask = abap_true EXPORTING
objname = lv_objname no_ask = abap_true
objtype = 'D' objname = lv_objname
no_ask_delete_append = abap_true objtype = 'D'
EXCEPTIONS no_ask_delete_append = abap_true
not_executed = 1 EXCEPTIONS
object_not_found = 2 not_executed = 1
object_not_specified = 3 object_not_found = 2
permission_failure = 4. object_not_specified = 3
IF sy-subrc <> 0. permission_failure = 4.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DOMA' ). IF sy-subrc <> 0.
ENDIF. zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DOMA' ).
ENDIF.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'RS_DD_DELETE_OBJ'
EXPORTING
no_ask = abap_true
objname = lv_objname
objtype = 'D'
* no_ask_delete_append = abap_true parameter not available in lower NW versions
EXCEPTIONS
not_executed = 1
object_not_found = 2
object_not_specified = 3
permission_failure = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from RS_DD_DELETE_OBJ, DOMA' ).
ENDIF.
ENDTRY.
ENDMETHOD. "delete ENDMETHOD. "delete
@ -369,4 +389,12 @@ CLASS ZCL_ABAPGIT_OBJECT_DOMA IMPLEMENTATION.
serialize_texts( io_xml ). serialize_texts( io_xml ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -162,4 +162,10 @@ CLASS zcl_abapgit_object_dsys IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_dsys IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_dsys IMPLEMENTATION

View File

@ -29,7 +29,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_DTEL IMPLEMENTATION. CLASS zcl_abapgit_object_dtel IMPLEMENTATION.
METHOD deserialize_texts. METHOD deserialize_texts.
@ -334,4 +334,13 @@ CLASS ZCL_ABAPGIT_OBJECT_DTEL IMPLEMENTATION.
serialize_texts( io_xml ). serialize_texts( io_xml ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESDICT'
iv_argument = |{ ms_item-obj_type }{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecat DEFINITION
METHODS: METHODS:
get_object_type REDEFINITION, get_object_type REDEFINITION,
get_upload REDEFINITION, get_upload REDEFINITION,
get_download REDEFINITION. get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS. ENDCLASS.
@ -51,4 +52,10 @@ CLASS zcl_abapgit_object_ecat IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT'.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -28,7 +28,11 @@ CLASS zcl_abapgit_object_ecatt_super DEFINITION
get_download ABSTRACT get_download ABSTRACT
RETURNING RETURNING
VALUE(ro_download) TYPE REF TO cl_apl_ecatt_download. VALUE(ro_download) TYPE REF TO cl_apl_ecatt_download,
get_lock_object ABSTRACT
RETURNING
VALUE(rv_lock_object) TYPE eqeobj.
PRIVATE SECTION. PRIVATE SECTION.
TYPES: TYPES:
@ -144,12 +148,9 @@ CLASS zcl_abapgit_object_ecatt_super IMPLEMENTATION.
lv_object_type = get_object_type( ). lv_object_type = get_object_type( ).
lo_element = ci_document->find_from_name( |{ lv_object_type }| ). lo_element = ci_document->find_from_name( |{ lv_object_type }| ).
lo_element->set_attribute( name = |SAPRL| lo_element->remove_attribute( |SAPRL| ).
value = || ). lo_element->remove_attribute( |DOWNLOADDATE| ).
lo_element->set_attribute( name = |DOWNLOADDATE| lo_element->remove_attribute( |DOWNLOADTIME| ).
value = || ).
lo_element->set_attribute( name = |DOWNLOADTIME|
value = || ).
ENDMETHOD. ENDMETHOD.
@ -631,5 +632,18 @@ CLASS zcl_abapgit_object_ecatt_super IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE seqg3-garg.
lv_object = ms_item-obj_name.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = get_lock_object( )
iv_argument = lv_object ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecsd DEFINITION
METHODS: METHODS:
get_object_type REDEFINITION, get_object_type REDEFINITION,
get_upload REDEFINITION, get_upload REDEFINITION,
get_download REDEFINITION. get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS. ENDCLASS.
@ -51,4 +52,10 @@ CLASS zcl_abapgit_object_ecsd IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_SD'.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecsp DEFINITION
METHODS: METHODS:
get_object_type REDEFINITION, get_object_type REDEFINITION,
get_upload REDEFINITION, get_upload REDEFINITION,
get_download REDEFINITION. get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS. ENDCLASS.
@ -53,4 +54,10 @@ CLASS zcl_abapgit_object_ecsp IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_SP'.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ectc DEFINITION
METHODS: METHODS:
get_object_type REDEFINITION, get_object_type REDEFINITION,
get_upload REDEFINITION, get_upload REDEFINITION,
get_download REDEFINITION. get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS. ENDCLASS.
@ -51,4 +52,10 @@ CLASS zcl_abapgit_object_ectc IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_TC'.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ectd DEFINITION
METHODS: METHODS:
get_object_type REDEFINITION, get_object_type REDEFINITION,
get_upload REDEFINITION, get_upload REDEFINITION,
get_download REDEFINITION. get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS. ENDCLASS.
@ -50,4 +51,10 @@ CLASS zcl_abapgit_object_ectd IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_TD'.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -16,7 +16,8 @@ CLASS zcl_abapgit_object_ecvo DEFINITION
METHODS: METHODS:
get_object_type REDEFINITION, get_object_type REDEFINITION,
get_upload REDEFINITION, get_upload REDEFINITION,
get_download REDEFINITION. get_download REDEFINITION,
get_lock_object REDEFINITION.
ENDCLASS. ENDCLASS.
@ -53,4 +54,10 @@ CLASS zcl_abapgit_object_ecvo IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD get_lock_object.
rv_lock_object = 'E_ECATT_TD'.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -28,8 +28,43 @@ CLASS zcl_abapgit_object_enho IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~get_metadata ENDMETHOD. "zif_abapgit_object~get_metadata
METHOD zif_abapgit_object~changed_by. METHOD zif_abapgit_object~changed_by.
rv_user = c_user_unknown. " todo
ENDMETHOD. "zif_abapgit_object~changed_by DATA: lv_enh_id TYPE enhname,
li_enho TYPE REF TO zif_abapgit_object_enho,
lt_log TYPE enh_log_it,
li_log_obj TYPE REF TO if_enh_log,
ls_enhlog TYPE enhlog,
lv_lines TYPE i,
lt_enhlog TYPE STANDARD TABLE OF enhlog WITH DEFAULT KEY,
li_enh_tool TYPE REF TO if_enh_tool.
lv_enh_id = ms_item-obj_name.
TRY.
li_enh_tool = cl_enh_factory=>get_enhancement(
enhancement_id = lv_enh_id
bypassing_buffer = abap_true ).
CATCH cx_enh_root.
rv_user = c_user_unknown.
RETURN.
ENDTRY.
lt_log = li_enh_tool->get_log( ).
LOOP AT lt_log INTO li_log_obj.
ls_enhlog = li_log_obj->get_enhlog( ).
APPEND ls_enhlog TO lt_enhlog.
ENDLOOP.
lv_lines = lines( lt_enhlog ).
READ TABLE lt_enhlog INTO ls_enhlog INDEX lv_lines.
IF sy-subrc = 0.
rv_user = ls_enhlog-loguser.
ELSE.
rv_user = c_user_unknown.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~exists. METHOD zif_abapgit_object~exists.
@ -176,4 +211,10 @@ CLASS zcl_abapgit_object_enho IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. "zif_abapgit_object~compare_to_remote_version ENDMETHOD. "zif_abapgit_object~compare_to_remote_version
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_enho IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_enho IMPLEMENTATION

View File

@ -179,4 +179,10 @@ CLASS zcl_abapgit_object_enhs IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_enhs ENDCLASS. "zcl_abapgit_object_enhs

View File

@ -175,4 +175,10 @@ CLASS zcl_abapgit_object_enqu IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_enqu IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_enqu IMPLEMENTATION

View File

@ -187,4 +187,10 @@ CLASS zcl_abapgit_object_ensc IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_ensc ENDCLASS. "zcl_abapgit_object_ensc

View File

@ -39,6 +39,12 @@ CLASS zcl_abapgit_object_form DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
RETURNING RETURNING
VALUE(r_result) TYPE string. VALUE(r_result) TYPE string.
METHODS _build_extra_from_header_old
IMPORTING
ls_header TYPE tys_form_header
RETURNING
VALUE(r_result) TYPE string.
METHODS _save_form METHODS _save_form
IMPORTING IMPORTING
it_lines TYPE zcl_abapgit_object_form=>tyt_lines it_lines TYPE zcl_abapgit_object_form=>tyt_lines
@ -254,6 +260,20 @@ CLASS zcl_abapgit_object_form IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD _build_extra_from_header. METHOD _build_extra_from_header.
DATA: lv_tdspras type laiso.
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_OUTPUT'
EXPORTING
input = ls_header-tdspras
IMPORTING
output = lv_tdspras.
r_result = c_objectname_tdlines && '_' && lv_tdspras.
ENDMETHOD.
METHOD _build_extra_from_header_old.
r_result = c_objectname_tdlines && '_' && ls_header-tdspras. r_result = c_objectname_tdlines && '_' && ls_header-tdspras.
ENDMETHOD. ENDMETHOD.
@ -307,9 +327,17 @@ CLASS zcl_abapgit_object_form IMPLEMENTATION.
DATA lv_string TYPE string. DATA lv_string TYPE string.
DATA lo_xml TYPE REF TO zcl_abapgit_xml_input. DATA lo_xml TYPE REF TO zcl_abapgit_xml_input.
lv_string = mo_files->read_string( iv_extra = TRY.
_build_extra_from_header( is_form_data-form_header ) lv_string = mo_files->read_string( iv_extra =
iv_ext = c_extension_xml ). _build_extra_from_header( is_form_data-form_header )
iv_ext = c_extension_xml ).
CATCH zcx_abapgit_exception.
lv_string = mo_files->read_string( iv_extra =
_build_extra_from_header_old( is_form_data-form_header )
iv_ext = c_extension_xml ).
ENDTRY.
CREATE OBJECT lo_xml EXPORTING iv_xml = lv_string. CREATE OBJECT lo_xml EXPORTING iv_xml = lv_string.
lo_xml->read( EXPORTING iv_name = c_objectname_tdlines lo_xml->read( EXPORTING iv_name = c_objectname_tdlines
@ -406,4 +434,10 @@ CLASS zcl_abapgit_object_form IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_FORM IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_FORM IMPLEMENTATION

View File

@ -5,73 +5,106 @@ CLASS zcl_abapgit_object_fugr DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
ALIASES mo_files FOR zif_abapgit_object~mo_files. ALIASES mo_files FOR zif_abapgit_object~mo_files.
PRIVATE SECTION. PRIVATE SECTION.
TYPES: ty_rs38l_incl_tt TYPE STANDARD TABLE OF rs38l_incl WITH DEFAULT KEY.
TYPES: BEGIN OF ty_function, TYPES:
funcname TYPE rs38l_fnam, ty_rs38l_incl_tt TYPE STANDARD TABLE OF rs38l_incl WITH DEFAULT KEY .
global_flag TYPE rs38l-global, TYPES:
remote_call TYPE rs38l-remote, BEGIN OF ty_function,
update_task TYPE rs38l-utask, funcname TYPE rs38l_fnam,
short_text TYPE tftit-stext, global_flag TYPE rs38l-global,
remote_basxml TYPE rs38l-basxml_enabled, remote_call TYPE rs38l-remote,
import TYPE STANDARD TABLE OF rsimp WITH DEFAULT KEY, update_task TYPE rs38l-utask,
changing TYPE STANDARD TABLE OF rscha WITH DEFAULT KEY, short_text TYPE tftit-stext,
export TYPE STANDARD TABLE OF rsexp WITH DEFAULT KEY, remote_basxml TYPE rs38l-basxml_enabled,
tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY, import TYPE STANDARD TABLE OF rsimp WITH DEFAULT KEY,
exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY, changing TYPE STANDARD TABLE OF rscha WITH DEFAULT KEY,
documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY, export TYPE STANDARD TABLE OF rsexp WITH DEFAULT KEY,
exception_classes TYPE abap_bool, tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY,
END OF ty_function. exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY,
documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY,
TYPES: ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY. exception_classes TYPE abap_bool,
END OF ty_function .
TYPES:
ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY .
METHODS update_where_used
IMPORTING
!it_includes TYPE rso_t_objnm .
METHODS main_name METHODS main_name
RETURNING VALUE(rv_program) TYPE program RETURNING
RAISING zcx_abapgit_exception. VALUE(rv_program) TYPE program
RAISING
zcx_abapgit_exception .
METHODS functions METHODS functions
RETURNING VALUE(rt_functab) TYPE ty_rs38l_incl_tt RETURNING
RAISING zcx_abapgit_exception. VALUE(rt_functab) TYPE ty_rs38l_incl_tt
RAISING
zcx_abapgit_exception .
METHODS includes METHODS includes
RETURNING VALUE(rt_includes) TYPE rso_t_objnm RETURNING
RAISING zcx_abapgit_exception. VALUE(rt_includes) TYPE rso_t_objnm
RAISING
zcx_abapgit_exception .
METHODS serialize_functions METHODS serialize_functions
RETURNING VALUE(rt_functions) TYPE ty_function_tt RETURNING
RAISING zcx_abapgit_exception. VALUE(rt_functions) TYPE ty_function_tt
RAISING
zcx_abapgit_exception .
METHODS deserialize_functions METHODS deserialize_functions
IMPORTING it_functions TYPE ty_function_tt IMPORTING
RAISING zcx_abapgit_exception. !it_functions TYPE ty_function_tt
RAISING
zcx_abapgit_exception .
METHODS serialize_xml METHODS serialize_xml
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_output IMPORTING
RAISING zcx_abapgit_exception. !io_xml TYPE REF TO zcl_abapgit_xml_output
RAISING
zcx_abapgit_exception .
METHODS deserialize_xml METHODS deserialize_xml
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input IMPORTING
iv_package TYPE devclass !io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception. !iv_package TYPE devclass
RAISING
zcx_abapgit_exception .
METHODS serialize_includes METHODS serialize_includes
RAISING zcx_abapgit_exception. RAISING
zcx_abapgit_exception .
METHODS deserialize_includes METHODS deserialize_includes
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input IMPORTING
iv_package TYPE devclass !io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception. !iv_package TYPE devclass
RAISING
zcx_abapgit_exception .
METHODS are_exceptions_class_based METHODS are_exceptions_class_based
IMPORTING iv_function_name TYPE rs38l_fnam IMPORTING
RETURNING VALUE(rv_return) TYPE abap_bool iv_function_name TYPE rs38l_fnam
RAISING zcx_abapgit_exception. RETURNING
VALUE(rv_return) TYPE abap_bool
RAISING
zcx_abapgit_exception .
METHODS is_function_group_locked
RETURNING
VALUE(rv_is_functions_group_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
METHODS is_any_include_locked
RETURNING
VALUE(rv_is_any_include_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
METHODS is_any_function_module_locked
RETURNING
VALUE(rv_any_function_module_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
ENDCLASS. ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION. CLASS zcl_abapgit_object_fugr IMPLEMENTATION.
METHOD are_exceptions_class_based. METHOD are_exceptions_class_based.
@ -122,12 +155,12 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT' CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT'
EXPORTING EXPORTING
complete_area = lv_area complete_area = lv_area
IMPORTING IMPORTING
namespace = lv_namespace namespace = lv_namespace
group = lv_group group = lv_group
EXCEPTIONS EXCEPTIONS
OTHERS = 12. OTHERS = 12.
IF sy-subrc <> 0. IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'error from FUNCTION_INCLUDE_SPLIT' ). zcx_abapgit_exception=>raise( 'error from FUNCTION_INCLUDE_SPLIT' ).
@ -559,6 +592,29 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
ENDMETHOD. "serialize_xml ENDMETHOD. "serialize_xml
METHOD update_where_used.
* make extra sure the where-used list is updated after deletion
* Experienced some problems with the T00 include
* this method just tries to update everything
DATA: lv_include LIKE LINE OF it_includes,
lo_cross TYPE REF TO cl_wb_crossreference.
LOOP AT it_includes INTO lv_include.
CREATE OBJECT lo_cross
EXPORTING
p_name = lv_include
p_include = lv_include.
lo_cross->index_actualize( ).
ENDLOOP.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by. METHOD zif_abapgit_object~changed_by.
TYPES: BEGIN OF ty_stamps, TYPES: BEGIN OF ty_stamps,
@ -634,9 +690,12 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
METHOD zif_abapgit_object~delete. METHOD zif_abapgit_object~delete.
DATA: lv_area TYPE rs38l-area. DATA: lv_area TYPE rs38l-area,
lt_includes TYPE rso_t_objnm.
lt_includes = includes( ).
lv_area = ms_item-obj_name. lv_area = ms_item-obj_name.
CALL FUNCTION 'RS_FUNCTION_POOL_DELETE' CALL FUNCTION 'RS_FUNCTION_POOL_DELETE'
@ -659,6 +718,8 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'error from RS_FUNCTION_POOL_DELETE' ). zcx_abapgit_exception=>raise( 'error from RS_FUNCTION_POOL_DELETE' ).
ENDIF. ENDIF.
update_where_used( lt_includes ).
ENDMETHOD. "delete ENDMETHOD. "delete
@ -801,4 +862,87 @@ CLASS ZCL_ABAPGIT_OBJECT_FUGR IMPLEMENTATION.
ENDIF. ENDIF.
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
DATA: lv_program TYPE program.
lv_program = main_name( ).
IF is_function_group_locked( ) = abap_true
OR is_any_include_locked( ) = abap_true
OR is_any_function_module_locked( ) = abap_true
OR is_any_dynpro_locked( lv_program ) = abap_true
OR is_cua_locked( lv_program ) = abap_true
OR is_text_locked( lv_program ) = abap_true.
rv_is_locked = abap_true.
ENDIF.
ENDMETHOD.
METHOD is_function_group_locked.
DATA: lv_object TYPE eqegraarg .
lv_object = |FG{ ms_item-obj_name }|.
OVERLAY lv_object WITH ' '.
lv_object = lv_object && '*'.
rv_is_functions_group_locked = exists_a_lock_entry_for( iv_lock_object = 'EEUDB'
iv_argument = lv_object ).
ENDMETHOD.
METHOD is_any_include_locked.
DATA: lt_includes TYPE rso_t_objnm.
FIELD-SYMBOLS: <lv_include> TYPE sobj_name.
TRY.
lt_includes = includes( ).
CATCH zcx_abapgit_exception.
RETURN.
ENDTRY.
LOOP AT lt_includes ASSIGNING <lv_include>.
IF exists_a_lock_entry_for( iv_lock_object = 'ESRDIRE'
iv_argument = |{ <lv_include> }| ) = abap_true.
rv_is_any_include_locked = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD is_any_function_module_locked.
DATA: lt_functions TYPE zcl_abapgit_object_fugr=>ty_rs38l_incl_tt.
FIELD-SYMBOLS: <ls_function> TYPE rs38l_incl.
TRY.
lt_functions = functions( ).
CATCH zcx_abapgit_exception.
RETURN.
ENDTRY.
LOOP AT lt_functions ASSIGNING <ls_function>.
IF exists_a_lock_entry_for( iv_lock_object = 'ESFUNCTION'
iv_argument = |{ <ls_function>-funcname }| ) = abap_true.
rv_any_function_module_locked = abap_true.
EXIT.
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -296,4 +296,10 @@ CLASS zcl_abapgit_object_iamu IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -184,4 +184,10 @@ CLASS zcl_abapgit_object_iarp IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_iarp IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_iarp IMPLEMENTATION

View File

@ -184,4 +184,10 @@ CLASS zcl_abapgit_object_iasp IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_iasp IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_iasp IMPLEMENTATION

View File

@ -201,4 +201,10 @@ CLASS zcl_abapgit_object_iatu IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_iatu IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_iatu IMPLEMENTATION

View File

@ -0,0 +1,235 @@
CLASS zcl_abapgit_object_idoc DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
ALIASES mo_files FOR zif_abapgit_object~mo_files.
METHODS:
constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_idoc,
attributes TYPE edi_iapi01,
t_syntax TYPE STANDARD TABLE OF edi_iapi02 WITH NON-UNIQUE DEFAULT KEY,
END OF ty_idoc.
DATA:
mv_idoctyp TYPE edi_iapi00-idoctyp.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_IDOC IMPLEMENTATION.
METHOD constructor.
super->constructor( is_item = is_item
iv_language = iv_language ).
mv_idoctyp = ms_item-obj_name.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: ls_attributes TYPE edi_iapi01.
CALL FUNCTION 'IDOCTYPE_READ'
EXPORTING
pi_idoctyp = mv_idoctyp
IMPORTING
pe_attributes = ls_attributes
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
rv_user = ls_attributes-plast.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
CALL FUNCTION 'IDOCTYPE_DELETE'
EXPORTING
pi_idoctyp = mv_idoctyp
EXCEPTIONS
object_not_found = 1
lock_error = 2
action_not_possible = 3
transport_error = 4
db_error = 5
no_authority = 6
OTHERS = 7.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_idoc TYPE ty_idoc,
ls_attributes TYPE edi_iapi05.
io_xml->read(
EXPORTING
iv_name = 'IDOC'
CHANGING
cg_data = ls_idoc ).
MOVE-CORRESPONDING ls_idoc-attributes TO ls_attributes.
CALL FUNCTION 'IDOCTYPE_CREATE'
EXPORTING
pi_idoctyp = mv_idoctyp
pi_devclass = iv_package
pi_attributes = ls_attributes
TABLES
pt_syntax = ls_idoc-t_syntax
EXCEPTIONS
object_not_found = 1
object_exists = 2
action_not_possible = 3
syntax_error = 4
segment_error = 5
transport_error = 6
db_error = 7
no_authority = 8
OTHERS = 9.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
CALL FUNCTION 'IDOCTYPE_READ'
EXPORTING
pi_idoctyp = mv_idoctyp
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
DATA: lt_bdcdata TYPE TABLE OF bdcdata.
FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-program = 'SAPMSED5'.
<ls_bdcdata>-dynpro = '0010'.
<ls_bdcdata>-dynbegin = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-OBJECT'.
<ls_bdcdata>-fval = ms_item-obj_name.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-SELECT_ORG'.
<ls_bdcdata>-fval = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'BDC_OKCODE'.
<ls_bdcdata>-fval = '=DISP'.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
STARTING NEW TASK 'GIT'
EXPORTING
tcode = 'WE30'
mode_val = 'E'
TABLES
using_tab = lt_bdcdata
EXCEPTIONS
system_failure = 1
communication_failure = 2
resource_failure = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_idoc TYPE ty_idoc.
CALL FUNCTION 'IDOCTYPE_READ'
EXPORTING
pi_idoctyp = mv_idoctyp
IMPORTING
pe_attributes = ls_idoc-attributes
TABLES
pt_syntax = ls_idoc-t_syntax
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CLEAR: ls_idoc-attributes-devc,
ls_idoc-attributes-plast,
ls_idoc-attributes-credate,
ls_idoc-attributes-cretime,
ls_idoc-attributes-ldate,
ls_idoc-attributes-ltime.
io_xml->add( iv_name = 'IDOC'
ig_data = ls_idoc ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_IDOC</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,231 @@
CLASS zcl_abapgit_object_iext DEFINITION PUBLIC INHERITING FROM zcl_abapgit_objects_super FINAL.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
ALIASES mo_files FOR zif_abapgit_object~mo_files.
METHODS:
constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_extention,
attributes TYPE edi_iapi01,
t_syntax TYPE STANDARD TABLE OF edi_iapi03 WITH NON-UNIQUE DEFAULT KEY,
END OF ty_extention.
DATA:
mv_extension TYPE edi_cimtyp.
ENDCLASS.
CLASS zcl_abapgit_object_iext IMPLEMENTATION.
METHOD constructor.
super->constructor( is_item = is_item
iv_language = iv_language ).
mv_extension = ms_item-obj_name.
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: ls_attributes TYPE edi_iapi01.
CALL FUNCTION 'EXTTYPE_READ'
EXPORTING
pi_cimtyp = mv_extension
IMPORTING
pe_attributes = ls_attributes
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
rv_user = ls_attributes-plast.
ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD.
METHOD zif_abapgit_object~delete.
CALL FUNCTION 'EXTTYPE_DELETE'
EXPORTING
pi_cimtyp = mv_extension
EXCEPTIONS
object_not_found = 1
lock_error = 2
action_not_possible = 3
transport_error = 4
db_error = 5
no_authority = 6
OTHERS = 7.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~deserialize.
DATA: ls_extension TYPE ty_extention,
ls_attributes TYPE edi_iapi05.
io_xml->read(
EXPORTING
iv_name = 'IEXT'
CHANGING
cg_data = ls_extension ).
MOVE-CORRESPONDING ls_extension-attributes TO ls_attributes.
CALL FUNCTION 'EXTTYPE_CREATE'
EXPORTING
pi_cimtyp = mv_extension
pi_devclass = iv_package
pi_attributes = ls_attributes
TABLES
pt_syntax = ls_extension-t_syntax
EXCEPTIONS
object_not_found = 1
object_exists = 2
action_not_possible = 3
syntax_error = 4
segment_error = 5
transport_error = 6
db_error = 7
no_authority = 8
OTHERS = 9.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~exists.
CALL FUNCTION 'EXTTYPE_READ'
EXPORTING
pi_cimtyp = mv_extension
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ).
ENDMETHOD.
METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~jump.
DATA: lt_bdcdata TYPE TABLE OF bdcdata.
FIELD-SYMBOLS: <ls_bdcdata> LIKE LINE OF lt_bdcdata.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-program = 'SAPMSED5'.
<ls_bdcdata>-dynpro = '0010'.
<ls_bdcdata>-dynbegin = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-OBJECT'.
<ls_bdcdata>-fval = ms_item-obj_name.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'SED5STRUC-SELECT_EXT'.
<ls_bdcdata>-fval = abap_true.
APPEND INITIAL LINE TO lt_bdcdata ASSIGNING <ls_bdcdata>.
<ls_bdcdata>-fnam = 'BDC_OKCODE'.
<ls_bdcdata>-fval = '=DISP'.
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
STARTING NEW TASK 'GIT'
EXPORTING
tcode = 'WE30'
mode_val = 'E'
TABLES
using_tab = lt_bdcdata
EXCEPTIONS
system_failure = 1
communication_failure = 2
resource_failure = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~serialize.
DATA: ls_extension TYPE ty_extention.
CALL FUNCTION 'EXTTYPE_READ'
EXPORTING
pi_cimtyp = mv_extension
IMPORTING
pe_attributes = ls_extension-attributes
TABLES
pt_syntax = ls_extension-t_syntax
EXCEPTIONS
object_not_found = 1
db_error = 2
no_authority = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CLEAR: ls_extension-attributes-devc,
ls_extension-attributes-plast,
ls_extension-attributes-credate,
ls_extension-attributes-cretime,
ls_extension-attributes-ldate,
ls_extension-attributes-ltime.
io_xml->add( iv_name = 'IEXT'
ig_data = ls_extension ).
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_IEXT</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSFINAL>X</CLSFINAL>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -34,7 +34,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
super->constructor( super->constructor(
is_item = is_item is_item = is_item
iv_language = iv_language ). iv_language = iv_language ).
mo_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( iv_object_type = ms_item-obj_type ). mo_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( ms_item-obj_type ).
ENDMETHOD. ENDMETHOD.
@ -67,7 +67,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
is_key = ls_clskey is_key = ls_clskey
it_descriptions = lt_descriptions ). it_descriptions = lt_descriptions ).
mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ). mo_object_oriented_object_fct->add_to_activation_list( ms_item ).
ENDMETHOD. ENDMETHOD.
@ -79,7 +79,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'LINES' io_xml->read( EXPORTING iv_name = 'LINES'
CHANGING cg_data = lt_lines ). CHANGING cg_data = lt_lines ).
IF lt_lines[] IS INITIAL. IF lines( lt_lines ) = 0.
RETURN. RETURN.
ENDIF. ENDIF.
@ -194,7 +194,7 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
ls_class_key-clsname = ms_item-obj_name. ls_class_key-clsname = ms_item-obj_name.
rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ). rv_bool = mo_object_oriented_object_fct->exists( ls_class_key ).
IF rv_bool = abap_true. IF rv_bool = abap_true.
SELECT SINGLE category FROM seoclassdf INTO lv_category SELECT SINGLE category FROM seoclassdf INTO lv_category
@ -265,4 +265,18 @@ CLASS ZCL_ABAPGIT_OBJECT_INTF IMPLEMENTATION.
serialize_xml( io_xml ). serialize_xml( io_xml ).
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
DATA: lv_object TYPE eqegraarg.
lv_object = |{ ms_item-obj_name }|.
OVERLAY lv_object WITH '==============================P'.
lv_object = lv_object && '*'.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESEOCLASS'
iv_argument = lv_object ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -205,4 +205,11 @@ CLASS ZCL_ABAPGIT_OBJECT_JOBD IMPLEMENTATION.
ENDTRY. ENDTRY.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -288,4 +288,10 @@ CLASS zcl_abapgit_object_msag IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_msag IMPLEMENTATION

View File

@ -274,4 +274,10 @@ CLASS zcl_abapgit_object_nrob IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_nrob IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_nrob IMPLEMENTATION

View File

@ -10,7 +10,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
METHOD zif_abapgit_object~has_changed_since. METHOD zif_abapgit_object~has_changed_since.
rv_changed = abap_true. rv_changed = abap_true.
ENDMETHOD. "zif_abapgit_object~has_changed_since ENDMETHOD.
METHOD zif_abapgit_object~changed_by. METHOD zif_abapgit_object~changed_by.
* looks like "changed by user" is not stored in the database * looks like "changed by user" is not stored in the database
@ -19,7 +19,9 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
METHOD zif_abapgit_object~get_metadata. METHOD zif_abapgit_object~get_metadata.
rs_metadata = get_metadata( ). rs_metadata = get_metadata( ).
ENDMETHOD. "zif_abapgit_object~get_metadata * Data elements can refer to PARA objects
rs_metadata-ddic = abap_true.
ENDMETHOD.
METHOD zif_abapgit_object~exists. METHOD zif_abapgit_object~exists.
@ -30,7 +32,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF WHERE paramid = ms_item-obj_name. "#EC CI_GENBUFF
rv_bool = boolc( sy-subrc = 0 ). rv_bool = boolc( sy-subrc = 0 ).
ENDMETHOD. "zif_abapgit_object~exists ENDMETHOD.
METHOD zif_abapgit_object~serialize. METHOD zif_abapgit_object~serialize.
@ -53,7 +55,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
io_xml->add( iv_name = 'TPARAT' io_xml->add( iv_name = 'TPARAT'
ig_data = ls_tparat ). ig_data = ls_tparat ).
ENDMETHOD. "serialize ENDMETHOD.
METHOD zif_abapgit_object~deserialize. METHOD zif_abapgit_object~deserialize.
* see fm RS_PARAMETER_ADD and RS_PARAMETER_EDIT * see fm RS_PARAMETER_ADD and RS_PARAMETER_EDIT
@ -99,7 +101,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
MODIFY tparat FROM ls_tparat. "#EC CI_SUBRC MODIFY tparat FROM ls_tparat. "#EC CI_SUBRC
ASSERT sy-subrc = 0. ASSERT sy-subrc = 0.
ENDMETHOD. "deserialize ENDMETHOD.
METHOD zif_abapgit_object~delete. METHOD zif_abapgit_object~delete.
@ -117,7 +119,7 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'error from RS_PRAMETER_DELETE' ). zcx_abapgit_exception=>raise( 'error from RS_PRAMETER_DELETE' ).
ENDIF. ENDIF.
ENDMETHOD. "delete ENDMETHOD.
METHOD zif_abapgit_object~jump. METHOD zif_abapgit_object~jump.
@ -128,10 +130,16 @@ CLASS zcl_abapgit_object_para IMPLEMENTATION.
object_type = 'PARA' object_type = 'PARA'
in_new_window = abap_true. in_new_window = abap_true.
ENDMETHOD. "jump ENDMETHOD.
METHOD zif_abapgit_object~compare_to_remote_version. METHOD zif_abapgit_object~compare_to_remote_version.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_para IMPLEMENTATION METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS.

View File

@ -345,4 +345,10 @@ CLASS zcl_abapgit_object_pinf IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_PINF IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_PINF IMPLEMENTATION

View File

@ -182,4 +182,11 @@ CLASS ZCL_ABAPGIT_OBJECT_PRAG IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Pragma { ms_item-obj_name } doesn't exist| ). zcx_abapgit_exception=>raise( |Pragma { ms_item-obj_name } doesn't exist| ).
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -17,13 +17,18 @@ CLASS zcl_abapgit_object_prog DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
RAISING zcx_abapgit_exception, RAISING zcx_abapgit_exception,
deserialize_texts deserialize_texts
IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input IMPORTING io_xml TYPE REF TO zcl_abapgit_xml_input
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception,
is_program_locked
RETURNING
VALUE(rv_is_program_locked) TYPE abap_bool
RAISING
zcx_abapgit_exception.
ENDCLASS. ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION. CLASS zcl_abapgit_object_prog IMPLEMENTATION.
METHOD deserialize_texts. METHOD deserialize_texts.
@ -148,7 +153,7 @@ CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
io_xml->read( EXPORTING iv_name = 'DYNPROS' io_xml->read( EXPORTING iv_name = 'DYNPROS'
CHANGING cg_data = lt_dynpros ). CHANGING cg_data = lt_dynpros ).
deserialize_dynpros( it_dynpros = lt_dynpros ). deserialize_dynpros( lt_dynpros ).
io_xml->read( EXPORTING iv_name = 'CUA' io_xml->read( EXPORTING iv_name = 'CUA'
CHANGING cg_data = ls_cua ). CHANGING cg_data = ls_cua ).
@ -213,4 +218,26 @@ CLASS ZCL_ABAPGIT_OBJECT_PROG IMPLEMENTATION.
serialize_texts( io_xml ). serialize_texts( io_xml ).
ENDMETHOD. "zif_abapgit_serialize~serialize ENDMETHOD. "zif_abapgit_serialize~serialize
METHOD zif_abapgit_object~is_locked.
IF is_program_locked( ) = abap_true
OR is_any_dynpro_locked( ms_item-obj_name ) = abap_true
OR is_cua_locked( ms_item-obj_name ) = abap_true
OR is_text_locked( ms_item-obj_name ) = abap_true.
rv_is_locked = abap_true.
ENDIF.
ENDMETHOD.
METHOD is_program_locked.
rv_is_program_locked = exists_a_lock_entry_for( iv_lock_object = 'ESRDIRE'
iv_argument = |{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -176,6 +176,13 @@ CLASS ZCL_ABAPGIT_OBJECT_SFBF IMPLEMENTATION.
ENDMETHOD. "zif_abapgit_object~has_changed_since ENDMETHOD. "zif_abapgit_object~has_changed_since
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
METHOD zif_abapgit_object~jump. METHOD zif_abapgit_object~jump.
CALL FUNCTION 'RS_TOOL_ACCESS' CALL FUNCTION 'RS_TOOL_ACCESS'

View File

@ -224,4 +224,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SFBS IMPLEMENTATION.
iv_name = 'PARENT_BFS' ). iv_name = 'PARENT_BFS' ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -224,4 +224,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SFPF IMPLEMENTATION.
io_xml->set_raw( li_document->get_root_element( ) ). io_xml->set_raw( li_document->get_root_element( ) ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -157,4 +157,10 @@ CLASS zcl_abapgit_object_sfpi IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_doma IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_doma IMPLEMENTATION

View File

@ -215,4 +215,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SFSW IMPLEMENTATION.
iv_name = 'CONFLICTS' ). iv_name = 'CONFLICTS' ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -261,4 +261,10 @@ CLASS zcl_abapgit_object_shi3 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shi3 IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_shi3 IMPLEMENTATION

View File

@ -126,4 +126,10 @@ CLASS zcl_abapgit_object_shi5 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shi5 IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_shi5 IMPLEMENTATION

View File

@ -132,4 +132,10 @@ CLASS zcl_abapgit_object_shi8 IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shi8 IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_shi8 IMPLEMENTATION

View File

@ -196,4 +196,10 @@ CLASS zcl_abapgit_object_shlp IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_shlp IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_shlp IMPLEMENTATION

View File

@ -266,4 +266,10 @@ CLASS zcl_abapgit_object_shma IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -572,4 +572,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SICF IMPLEMENTATION.
ig_data = lt_icfhandler ). ig_data = lt_icfhandler ).
ENDMETHOD. "serialize ENDMETHOD. "serialize
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -330,4 +330,10 @@ CLASS zcl_abapgit_object_smim IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_smim IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_smim IMPLEMENTATION

View File

@ -109,4 +109,10 @@ CLASS zcl_abapgit_object_splo IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_splo IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_splo IMPLEMENTATION

View File

@ -181,4 +181,11 @@ CLASS ZCL_ABAPGIT_OBJECT_SRFC IMPLEMENTATION.
ig_data = <lg_srfc_data> ). ig_data = <lg_srfc_data> ).
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = abap_false.
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -225,7 +225,9 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
lv_name TYPE string, lv_name TYPE string,
li_iterator TYPE REF TO if_ixml_node_iterator, li_iterator TYPE REF TO if_ixml_node_iterator,
lo_sf TYPE REF TO cl_ssf_fb_smart_form, lo_sf TYPE REF TO cl_ssf_fb_smart_form,
lo_res TYPE REF TO cl_ssf_fb_smart_form. lo_res TYPE REF TO cl_ssf_fb_smart_form,
lx_error TYPE REF TO cx_ssf_fb,
lv_text TYPE string.
CREATE OBJECT lo_sf. CREATE OBJECT lo_sf.
@ -252,21 +254,28 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
tadir_insert( iv_package ). tadir_insert( iv_package ).
lv_formname = ms_item-obj_name. lv_formname = ms_item-obj_name.
lo_sf->enqueue( suppress_corr_check = space
master_language = mv_language
mode = 'INSERT'
formname = lv_formname ).
lo_sf->xml_upload( EXPORTING dom = io_xml->get_raw( )->get_root_element( ) TRY.
formname = lv_formname lo_sf->enqueue( suppress_corr_check = space
language = mv_language master_language = mv_language
CHANGING sform = lo_res ). mode = 'INSERT'
formname = lv_formname ).
lo_res->store( im_formname = lo_res->header-formname lo_sf->xml_upload( EXPORTING dom = io_xml->get_raw( )->get_root_element( )
im_language = mv_language formname = lv_formname
im_active = abap_true ). language = mv_language
CHANGING sform = lo_res ).
lo_sf->dequeue( lv_formname ). lo_res->store( im_formname = lo_res->header-formname
im_language = mv_language
im_active = abap_true ).
lo_sf->dequeue( lv_formname ).
CATCH cx_ssf_fb INTO lx_error.
lv_text = lx_error->get_text( ).
zcx_abapgit_exception=>raise( |{ ms_item-obj_type } { ms_item-obj_name }: { lv_text } | ).
ENDTRY.
ENDMETHOD. "deserialize ENDMETHOD. "deserialize
@ -274,4 +283,11 @@ CLASS zcl_abapgit_object_ssfo IMPLEMENTATION.
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null. CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_SMFORM'
iv_argument = |{ ms_item-obj_name }| ).
ENDMETHOD.
ENDCLASS. "zcl_abapgit_object_ssfo IMPLEMENTATION ENDCLASS. "zcl_abapgit_object_ssfo IMPLEMENTATION

Some files were not shown because too many files have changed in this diff Show More