From Fedora Project Wiki

(Cross-link to "New package process for existing contributors")
(Replaced content with "{{admon/warning |This page has been moved out of the wiki. The current version of this document is located at https://docs.fedoraproject.org/en-US/package-maintainers/Pack...")
Tag: Replaced
 
(61 intermediate revisions by 36 users not shown)
Line 1: Line 1:
The following paragraphs are provisional content during the (doc) migration from dist-cvs to dist-git is happening.
+
{{admon/warning |This page has been moved out of the wiki. The current version of this document is located at https://docs.fedoraproject.org/en-US/package-maintainers/Package_Maintenance_Guide/ Please update your bookmarks.}}
 
 
{{admon/important | Git config needs| A config problem has been discovered which may make <code>fedpkg push</code> or <code>fedpkg commit -p</code> or even <code>git push</code> not understand your intentions.  As a short term work around, you can run: <code>git config --global --add push.default tracking</code>.  This option tells git that when it gets a push request with no other arguments, see if it's tracking a remote branch.  If it is, push to that remote branch.  This seems like it will usually be safe no matter what git repository you are using.}}
 
 
 
== Cookbooks ==
 
 
 
[[New package process for existing contributors]] gives step-by-step instructions for that case.
 
 
 
== Commands ==
 
 
 
{{admon/note |  Make sure you have updated to fedora-packager version 0.5.1 atleast before running any of these commands }}
 
 
 
Here is a basic table of equivalent commands:
 
{|
 
! OLD CVS !! NEW GIT !! Notes
 
|-
 
|cvs checkout libfoo || fedpkg clone libfoo || Note that branches are not separated out by directory with this command. <BR> To switch to a different branch with this layout, run: fedpkg switch-branch f13
 
|-
 
|cvs checkout libfoo '''(ALTERNATE)''' ||fedpkg clone -B libfoo || This command creates the same branch/directory layout that was used with cvs.
 
|-
 
|cvs update || git pull ||fedpkg will get a pull soon.
 
|-
 
|cvs commit . || fedpkg commit -p || The -p option to commit invokes a push, just like with git, but you can separate these actions, as shown just below
 
|-
 
|cvs commit . '''(ALTERNATE)''' || fedpkg commit && fedpkg push ||
 
|-
 
|cvs commit -m 'breaking things' . || fedpkg commit -m 'breaking things' -p ||
 
|-
 
|cvs add foo bar || git add foo bar ||
 
|-
 
|make clog || fedpkg clog || Create the "clog" file from the %changelog of the specfile.
 
|-
 
|cvs commit -F clog . || fedpkg commit -F clog -p || Use the contents of file "clog" as the commit message.
 
|-
 
|make tag || N/A || Explicitly tagging source states for package builds is no longer necessary.
 
|-
 
|make build || fedpkg build || When successful on Koji, the build will trigger the package to be tagged with the corresponding tag (e.g., dist-f15 for Rawhide and dist-f14-updates-candidate for F14)
 
|-
 
|BUILD_FLAGS="--nowait" make build || fedpkg build --nowait || See above. The --nowait option to the build command avoid your waiting (for the build to complete before freeing up the Shell)
 
|-
 
|make prep || fedpkg prep ||
 
|-
 
|make chain-build CHAIN='foo bar : baz'|| fedpkg chain-build foo bar : baz || Just like before, the current directory package is always added to the end of the CHAIN list.
 
|-
 
|make scratch-build || fedpkg scratch-build ||
 
|-
 
|make srpm || fedpkg srpm ||
 
|-
 
|make srpm-scratch-build || fedpkg srpm<BR>fedpkg scratch-build --srpm <name of srpm> || Ideally this would be made a single "fedpkg srpm-scratch-build" command
 
|-
 
|make local || fedpkg local ||
 
|-
 
|make x86_64 || fedpkg local --arch x86_64 ||
 
|-
 
|make upload FILES='apollo starbuck'|| fedpkg upload apollo starbuck || Remember, this adds new source files without replacing others.
 
|-
 
|make new-sources FILES='red_fish blue_fish' || fedpkg new-sources red_fish blue_fish || This replaces any existing source files.
 
|-
 
|make help || fedpkg help || "fedpkg -h" also works
 
|-
 
|./cvs-import.sh libfoo-1.2-3.src.rpm || mkdir libfoo <BR> cd libfoo <BR> fedpkg import libfoo-1.2-3.src.rpm <BR> (Review Changes) <BR> fedpkg commit -p ||
 
|}
 
 
 
=== Merging ===
 
Merging is one of the things that we can now do directly in the VCS that we had to do with an external diff program in CVS.  Getting used to how it works may take a little adjustment though.
 
 
 
==== Initial Merging ====
 
 
 
First, the way we imported from cvs means that we have to do a little work to make the older release branches "mergable" (F-14, since it branched after the conversion to git, doesn't need this).
 
 
 
{{admon/note|Which branches should you this apply to?|For packages where F-12, F-13, the freshly branched F-14 and rawhide all have the same spec files and packages, merging all the branches together clearly makes sense. However, when, say F-12 and F-13 share a package NVR, and F-14 and rawhide do... what to do then? Merge the branches that are supposed to be the same, then.
 
}}
 
 
 
<pre>
 
fedpkg clone bzrtools
 
cd bzrtools
 
git merge origin/f13/master
 
# If no conflicts proceed to the next step.
 
# Otherwise, resolve the conflicts, git add & git commit, and then move on
 
git merge origin/f12/master
 
git merge origin/el6/master
 
git merge origin/el5/master
 
</pre>
 
 
 
Potentially better alternative to the above (without conflicts, without actually changing the master content, and merging ALL former CVS branches which are supposed to be the same package):
 
 
 
<pre>
 
fedpkg clone menu-cache
 
cd menu-cache
 
# implicitly we have the master branch checked out here
 
git merge -m "Initial pseudo merge for dist-git setup" -s ours origin/{f12,f13}/master
 
</pre>
 
 
 
==== Merging in normal operation ====
 
 
 
Now when you make changes on one branch and want to move them to a different branch, you can use git to merge those changes.
 
 
 
<pre>
 
fedpkg clone bzrtools
 
# Make some changes in the master branch
 
fedpkg new-sources bzrtools-2.2.tar.gz
 
vim bzrtools.spec
 
git commit
 
fedpkg switch-branch f14
 
git merge master
 
# for push into repo
 
git push
 
</pre>
 
 
 
==== Resolving merge conflicts ====
 
Resolving conflicts is only slightly different than in cvs.  When you git merge and a conflict occurs you still edit the files that have conflicts.  Remove the conflict markers in the files and merge the changes manually.  Then you need to commit your changes.  Do that with <code>git add CONFLICTEDFILES ; git commit</code>
 
 
 
===== Using <code>git mergetool</code> to resolve conflicts =====
 
Git allows you to set a graphical diff program to help resolve conflicts.  This can be handy for visualizing what changes have occurred and deal with them as a set.
 
<pre>
 
git config --global merge.tool meld
 
fedpkg switch-branch f13
 
git merge master
 
# Conflicts occurred
 
git mergetool # Opens up a meld showing a three way diff of the merge, working tree, and the last commit
 
# Resolved all the conflicts in the GUI
 
git add CONFLICTEDFILES
 
git commit
 
</pre>
 
 
 
== Branch names ==
 
{|
 
! Old CVS !! new remote git !! fedpkg local branch names !! Notes
 
|-
 
| devel || origin/master || master || This is the default when you do fedpkg co
 
|-
 
| F-14 || origin/f14/master || f14 ||
 
|-
 
| F-13 || origin/f13/master || f13 ||
 
|-
 
| F-12 || origin/f12/master || f12 ||
 
|-
 
| EL-6 || origin/el6/master || el6 ||
 
|-
 
| EL-5 || origin/el5/master || el5 ||
 
|}
 
 
 
{{admon/note|local branch names| If you use git commands to branch and checkout directly, you can define whatever local branch names you want.  If you use <code>fedpkg switch-branch</code>, it will default to creating the names listed in the table above.  So you can do <code>fedpkg clone firefox ; fedpkg switch-branch f14</code> and then you'll have a new local branch named <code>f14</code>}}
 
 
 
{{admon/tip|Display current branch in your shell prompt| It is often helpful to know what branch you are working on at a glance.  You can add this information to your bash prompt with the information [[Git_Quickref#Display_current_branch_in_bash|here]].}}
 
 
 
== Errors ==
 
 
 
=== Access denied ===
 
 
 
During the next few days and weeks, occasional tweaking to the servers might cause short periods (seconds or minutes) when the git server refuses you access. Just try again.
 
 
 
=== Unable to switch ===
 
 
 
If you are trying switch to another branch by fedpkg switch-branch f13 and see this:
 
Unable to switch to another branch: Could not create branch f13
 
 
 
Then you probably have some un-commited changes in master. If you want them, call:
 
<pre>
 
# this "save" them
 
git stash
 
# switch to preferred branch, now possible
 
fedpkg switch-branch f13
 
# apply "saved" changed in the current branch
 
git stash apply
 
</pre>
 
 
 
== ssh fingerprint ==
 
 
 
The recommend option is to include "<code>VerifyHostKeyDNS yes</code>" in your ~/.ssh/config file. This will result in using DNS to check that the key is correct.
 
 
 
But you can also manually check against the  list of keys at https://admin.fedoraproject.org . The strings there are what ends up in your ~/.ssh/known_hosts file. So you can accept the fingerprint when prompted and then check that the correct string for pkgs.fedoraproject.org ended up in your ~/.ssh/known_hosts file.
 
 
 
== Other Links ==
 
Some links related to dist-git:
 
 
 
* http://pkgs.fedoraproject.org/gitweb/ BROKEN (listing 10K+ packages does not work). Use e.g. http://pkgs.fedoraproject.org/gitweb/?p=erlang.git directly for the erlang package (also broken, unfortunately)
 
* [[Package SCM admin requests]] (was [[CVS_admin_requests]] and [[PackageMaintainers/CVSAdminProcedure]])
 
 
 
Some links related to the actual migration to dist-git:
 
 
 
* [[Infrastructure/VersionControl/dist-git]]
 
 
 
Basic changes:
 
 
 
* fedpkg replaces make
 
* git replaces cvs
 
 
 
Some links needing migration follow. Note that after migration texts might better refer to generic SCM instead of a specific name like cvs or git:
 
 
 
* [[Package_Renaming_Process]] trivial fixes needed
 
* [[CVS_access_for_package_maintainers]] lots to do
 
* [[PackageMaintainers/BuildRequests]] fedpkg instead of make
 
* [[PackageMaintainers/PackagingTricks]] contains references to cvs, make
 
* [[Package_update_HOWTO]] references cvs+make
 
* [[PackageMaintainers/BuildSystemClientSetup#Install_the_Client_Tools_.28Koji.29]] references cvs+make
 
* [[PackageMaintainers/MockTricks#How_do_I_use_Mock.3F]] talks about "CVS sandbox" (fixed)
 
* [[Package_Review_Process]] talks about CVS
 
* [[Fedora_Release_Life_Cycle]] talks about CVS
 
* [[PackageMaintainers/Join]] refers to CVS, cvs-import.sh and fedora-cvs throughout (made a start, but whole document needs a good overhaul)
 
 
 
This list probably is not complete.
 

Latest revision as of 06:08, 7 September 2021

Warning.png
This page has been moved out of the wiki. The current version of this document is located at https://docs.fedoraproject.org/en-US/package-maintainers/Package_Maintenance_Guide/ Please update your bookmarks.