Opened 14 years ago

Closed 14 years ago

#2860 closed bug (fixed)

script doesn't recognize svn revision

Reported by: Adek336 Owned by: bonefish
Priority: normal Milestone: R1
Component: Build System Version: R1/pre-alpha1
Keywords: Cc: planche2k@…
Blocked By: Blocking:
Platform: All


Because of the fact the svn hangs in Haiku (#2840), I used Debian to svn checkout the sources and Haiku to copy them to a BFS partition and to jam them. Unfortunately

AddSymlinkToContainerCopyFilesScript <HaikuImage>beos/system/add-ons/kernel/drivers/dev/net/syskonnect 
AddSymlinkToContainerCopyFilesScript <HaikuImage>beos/system/add-ons/kernel/drivers/dev/net/usb_ecm 
CopySetHaikuRevision1 generated/objects/haiku/x86/release/system/kernel/revisioned/kernel_x86 
Usage: set_haiku_revision  <file> <revision>

Finds the haiku revision section in ELF object file <file> and replaces the
writes the number given by <revision> into the first 32 bits of the

revision=`(LC_ALL=C LANG=C svn info . 2> /dev/null ||
(cd . && LC_ALL=C LANG=C git svn info) 2> /dev/null ||
(git log --max-count=1 --grep="git-svn-id:" 2> /dev/null |
grep git-svn-id: | cut -d '@' -f 2 |
awk '{printf "Revision: " $1}') 2> /dev/null ||
echo Revision: 0) |
grep Revision | awk '{printf $2}'`
generated/objects/haiku_host/x86/release/tools/copyattr --data generated/objects/haiku/x86/release/system/kernel/kernel_x86 generated/objects/haiku/x86/release/system/kernel/revisioned/kernel_x86 &&
generated/objects/haiku_host/x86/release/tools/set_haiku_revision generated/objects/haiku/x86/release/system/kernel/revisioned/kernel_x86 ${revision}

...failed CopySetHaikuRevision1 generated/objects/haiku/x86/release/system/kernel/revisioned/kernel_x86 ...
...removing generated/objects/haiku/x86/release/system/kernel/revisioned/kernel_x86
...skipped <HaikuImage>haiku.image-copy-files-dummy-beos/system for lack of <revisioned>kernel_x86...

I believe it is a problem with build/jam/FileRules

        revision=`(LC_ALL=C LANG=C svn info $(HAIKU_TOP) 2> /dev/null ||
                (cd $(HAIKU_TOP) && LC_ALL=C LANG=C git svn info) 2> /dev/null ||
                (git log --max-count=1 --grep="git-svn-id:" 2> /dev/null |
                        grep git-svn-id: | cut -d '@' -f 2 |
                        awk '{printf "Revision: " $1}') 2> /dev/null ||
                echo Revision: 0) |
                grep Revision | awk '{printf $2}'`

This is related to the fact that svn cannot find out the revision number

/haiku-dane/haiku> svn info 
svn: This client is too old to work with working copy '.'; please get a newer Subversion client

the script then tries to ask git for the revision number. And git fails as I don't use nor have it

/haiku-dane/haiku> git
sh: git: command not found

but the script doesn't then fall back to revision=0; scenario:

/haiku-dane/haiku> no_such_command
sh: no_such_command: command not found
/haiku-dane/haiku> ((no_such_command) 2> /dev/null )
/haiku-dane/haiku> echo $?
/haiku-dane/haiku> ((no_such_command | awk '{printf "Revision: " $1}') 2> /dev/null )
/haiku-dane/haiku> echo $?

Expected behaviour: it should fail on getting the revision from both svn and git and fall back to revision=0.

As a note, I was able to do so (check out on Debian, build on Haiku, with svn versions incompatible) just about 2 weeks ago.

Attachments (1)

0001-Fix-extracting-revision-number-with-git-svn.patch (1.8 KB ) - added by andreasf 14 years ago.
Proposed patch

Download all attachments as: .zip

Change History (10)

comment:1 by andreasf, 14 years ago

Cc: andreas.faerber@… added

comment:2 by andreasf, 14 years ago

My git patch was a quick addition to get the revision number displayed. A better solution might be to split up the command, e.g. (pseudocode)

revision=`(svn info || git svn info || other-svn-info-compatible-VCS || echo "Revision: 0") | grep Revision | awk ...`
if (revision == "0")
    revision=`git log ... | echo 0` # try git without git-svn
if (revision == "0")
    revision=... # try Mercurial/Bazaar/your-favorite-VCS

That would avoid that use of awk to put it into the Revision: nnnnn format to later extract it again.

comment:3 by bonefish, 14 years ago

Resolution: fixed
Status: newclosed

Fixed in hrev28226.

in reply to:  3 comment:4 by andreasf, 14 years ago

Resolution: fixed
Status: closedreopened

Unfortunately this fix broke the original git svn info code path by not extracting the correct piece of information like from svn info. Patch coming up shortly.

by andreasf, 14 years ago

Proposed patch

in reply to:  3 comment:5 by andreasf, 14 years ago

When git-svn was in fact usable, the whole svn info-like output was stored in $revision. The final if doesn't check for a sane numeric value, and no revision information was displayed in AboutSystem.

The attached patch reunifies svn and git-svn to share the postprocessing (grep, awk).

If both fail, $revision should be empty, triggering Ingo's if and my pure git fallback. Failing that as well, $revision should be empty once again and thus set to 0, still fixing #2860.

comment:6 by andreasf, 14 years ago

Cc: planche2k@… added

Ping: Could someone please review the attached patch? Thanks!

comment:7 by axeld, 14 years ago

Rene or Ryan, aren't you both using git? Can either of you please have a look?

in reply to:  7 comment:8 by andreasf, 14 years ago

Cc: andreas.faerber@… removed

@Axel: Since the original hrev26977 patch was mine, you could trust me that the Git part is okay! ;) What I do not have a setup for, is a build without git.

The ticket reporter or anyone else with a non-svn, non-git setup should have a look.

Or commit it after reviewing that it doesn't affect regular svn users, and let people reopen later if necessary - the current svn state is a regression.

comment:9 by axeld, 14 years ago

Resolution: fixed
Status: reopenedclosed

Applied in hrev31333, thanks!

Note: See TracTickets for help on using tickets.